如何在我的开发git分支中跟踪origin/master

6

我是git的新手,想知道如何处理一个非常基本的情况。我在stackoverflow上读了很多关于git的文章,但仍然无法找到答案。

我们有一个名为origin/master的远程分支,大家都在上面工作。我有一个叫做FeatureA的功能需要实现,可能需要一些时间来开发。与此同时,人们可能会向origin/master检入代码。

考虑到以下需求,我的工作流程会是什么样子,我应该如何设置我的git分支:

  1. 我希望能够将代码更改提交到我的分支,并将它们推送到我们服务器上的远程分支,以防我的电脑出问题而丢失更改。

  2. 我希望保持我的分支与主分支同步。

  3. 我希望尽量减少常规合并。我喜欢git rebase的概念,因此希望最大化其使用,从而进行快进合并。

  4. 在某个时候,我们将不得不将我的FeatureA分支合并到origin/master中。

总结:

我如何设置一个从origin/master拉取但推送到origin/MY-BRANCH的分支?

我的工作流程会是什么样子?

更新:

谢谢@will-pragnell!您的解决方案与以下解决方案有何区别。

这个github页面建议:

https://github.com/diaspora/diaspora/wiki/Git-Workflow

为了从开发主干获取最新更新,进行一次设置以将主GitHub存储库作为远程输入:

$ git remote add upstream git://github.com/diaspora/diaspora.git
$ git fetch upstream
$ git checkout master
$ git rebase upstream/master
$ git checkout 100-retweet-bugfix

[确保在分支中提交所有必要的更改]

$ git rebase master
2个回答

5
您可能不想创建一个从主分支拉取并将更改推送到您自己的分支的分支。您想要的是从主分支上拉到本地主分支,本地处理rebase,然后再将更改推送到您自己的远程分支以进行功能开发。这是一个相当标准的工作流程,能够完全控制和最小化合并量。个人建议按照以下步骤操作:
创建一个新的本地分支。
git checkout -b myFeature

将此推送到新的远程分支(如果需要更多关于此步骤的信息,请参见此stackoverflow问题
git push origin myFeature

现在,您可以愉快地在myFeature分支上工作,并在需要时使用上述命令推送,而不会搞乱主分支。当您需要获得其他人在主分支上执行的提交时,可以按照以下方式操作:

git checkout master
git pull (this will just fast-forward if you don't make any local changes to master)
git checkout myFeature
git rebase master

当你的功能完成后,你可以将分支合并或变基到主分支(master)中,以便其他人获得你的新功能。像这样:

git checkout master
git merge myFeature
git push origin master

谢谢@will-Pragnell!我的问题已经更新,以下是我的问题:您的解决方案与以下解决方案有何区别。此页面在github上建议:https://github.com/diaspora/diaspora/wiki/Git-Workflow为了从开发主干获取最新更新,请进行一次设置以将主GitHub存储库作为远程输入: $ git remote add upstream git://github.com/diaspora/diaspora.git, $ git fetch upstream, $ git checkout master, $ git rebase upstream / master, $ git checkout 100-retweet-bugfix, [确保所有分支中必要的内容都已提交], $ git rebase master - ben39
我执行了以下操作:git checkout master git merge myFeature git push origin master但我得到了如下错误信息:! [rejected] multi-senders -> multi-senders (non-fast-forward) error: failed to push some refs to 'ssh://xxx' 为防止您丢失历史记录,非快进更新被拒绝。 在再次推送之前,合并远程更改(例如'git pull')。有关详细信息,请参见“git push --help”中的“有关快进的注意事项”部分。 - ben39
关于你的第二条评论 - 你在尝试合并之前是否将分支变基到主分支上了?(稍后我有空的时候会再看一下你的第一条评论 - 抱歉,这里非常忙!) - Will Pragnell
看起来 Github 上的指南增加了一个新的远程调用步骤,称为 'upstream'。在我的指南中,基于您在问题中所说的话:“我们有一个 origin/master 远程分支,每个人都在上面工作”,我假设您不需要执行此操作。虽然我还没有使用过 Github,但我认为这是特定于该指南所提供的用例的内容。 - Will Pragnell

0

git checkout -b FeatureA(创建并切换到分支)
git push origin FeatureA(将新创建的分支推送到远程仓库)

在新的FeatureA分支上工作,如果不想频繁合并,则可以使用变基操作。

git rebase origin  

将来无论何时您想要合并到主分支。

git checkout master  
git merge FeatureA  
git push origin master  

每次我执行 'git rebase master' 然后 'git push origin/multi-senders',我都会得到以下错误信息:To ssh:xxx ! [rejected] multi-senders -> multi-senders (non-fast-forward) error: failed to push some refs to 'ssh://xxx' To prevent you from losing history, non-fast-forward updates were rejected. Merge the remote changes (e.g. 'git pull') before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details. - ben39

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接