我知道这个问题以前已经问过了,但对我来说,答案似乎随着时间的推移而改变,所以我很困惑。因此,在2012年12月22日末日之后,(那些幸存下来的人)当你想从远程分支拉入最新的更改时,推荐使用git的方式是什么?说"开发"。
我用pull,老实说,我从来没用fetch。我只是觉得我可能会让自己陷入一些奇怪的情况。
这是我工作流程的一个例子:
git pull origin develop
git checkout -b story-001
...do some work
git commit -am "fixed utests"
.. do some more work
git commit -am "fixed impl for service x"
git rebase develop
git checkout develop
git merge --squash story-001
git commit -m "Story 001 completed <testinfo>"
git push origin develop
..error.. master is head..
git pull origin develop
..maybe merge issue
git mergetool
..resolved problem
git commit -am "resolved merge for story 001"
git push origin develop
git branch -D story-001
....
... and so on
... after a while some changes on remote <develop>
...
git pull origin develop
既然你在我的世界里看不到任何东西,为什么要有呢?
好,git pull
做git fetch
,然后是git merge
。因此,如果您希望自动合并pull
ed存储库,那么您不需要git fetch
。
如果你想让你当前的(本地)工作保持在前列,你可以这样做
git fetch
git rebase origin/develop
或
git pull --rebase
合并代码,例如,当远程和本地发生更改时,可能会导致本地工作的顺序错误,并被远程更改覆盖。
所以如果你只想抓取远程,你应该做pull and fetch如果你在本地做了一些工作。为了简单起见。但大多数时候,如果你幸运的话,拉动会起作用。
这是我通过做更多的研究了解到的。然而,我不确定,直到我尝试了一个小实验来验证。
我认为最好的解决方案是大多数时候使用git pull -rebase,这样更有意义。按照我的理解,你可以改变git pull的默认行为,但这可能很危险,因为你可能会忘记它,让自己更加困惑。
我通常是这样做的:
git pull origin develop
git checkout -b story-001
git commit -am "..."
# more commits, squash the commits, reorganize
在这个阶段,我经常执行git fetch
以获得最新的更改。如果有任何新的更改,我将执行git rebase origin/develop
,将我在功能分支上的工作移动到新更改的顶部。
# work some more
git checkout develop
git merge # defaults to origin
git merge story-001
git push
在这个工作流中,我没有合并提交,历史记录非常干净。我也不经常写这些命令,试试git-smart。