Git Workflow Pull vs Fetch



我知道这个问题以前已经问过了,但对我来说,答案似乎随着时间的推移而改变,所以我很困惑。因此,在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 pullgit 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。

相关内容

  • 没有找到相关文章

最新更新