Git Workflow Pull vs Fetch

Use*_*456 3 git workflow pull fetch

我知道之前已经问过这个问题,但在我看来答案已经随着时间的推移而改变,所以我很困惑.所以在2012年12月22日圆满之后,(我们这些幸存下来的人)一劳永逸,当你想从远程分支中获取最新变化时,建议使用git的方式是"开发".

我使用拉,说实话从来没用过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
Run Code Online (Sandbox Code Playgroud)

正如你在我的世界中看不到的那样,为什么会这样?

小智 9

嗯,git pull确实git fetch其次git merge.因此,如果您希望自动合并pulled存储库,那么您就不需要了git fetch.


Use*_*456 6

如果您希望当前(本地)的工作保持领先,那么您就可以了

git fetch
git rebase origin/develop
Run Code Online (Sandbox Code Playgroud)

要么

git pull --rebase
Run Code Online (Sandbox Code Playgroud)

代码中的合并,即远程和本地更改时的拉动,可能会导致本地工作的顺序错误,并被远程更改覆盖.

因此,如果你想抓住遥控器,你应该做拉动和获取,如果你已经在你的本地做了一些工作.只是为了保持简单.但是大多数时候,如果你运气好的话,拉动会起作用.

这是我通过做更多研究所理解的.但是,在我尝试进行一些实验验证之前,我不确定.

我认为最好的解决方案是大多数时候使用git pull --rebase,不知何故更有意义.您可以根据我的理解更改git pull的默认行为,但这可能很危险,因为您可能会忘记它并使自己更加困惑.