vij*_*jar 47 git version-control merge
我正在开发一个本地分支"BDD-local",并希望得到其他开发人员的更改.其他开发人员正在使用他们自己的分支,一旦他们对单元测试感到满意,他们就会将更改推送到远程仓库(origin/master).
我在这里经历了几个帖子并获得了相互矛盾的信息.很少有人谈论使用:
git fetch origin
git merge origin/master
Run Code Online (Sandbox Code Playgroud)
其他人认为,'git pull'应该得到改变.
我们的一位开发人员要求使用'git merge origin/master'而不使用'git fetch'
有谁知道哪些选项更好.我在我的本地分支上试过'git pull',但它似乎没有用.但是,如果我对本地大师'git pull'它工作正常(但我希望它适用于本地分支)
Mik*_*icz 74
获取,合并和拉取
git fetch
并且git merge origin/master
将获取与整合远程变化.让我解释一个常见的情况.产地/主是C.有人推D.你对E&F.请注意,你不会看到d在你的本地库,直到你运行工作git fetch
.
origin/master
v
A-B-C-E-F < master
\
(D) < master on remote
Run Code Online (Sandbox Code Playgroud)
现在你跑git fetch
.现在您可以看到D,并更新origin/master以匹配它正在跟踪的远程存储库.
A-B-C-E-F < master
\
D < origin/master, master on remote
Run Code Online (Sandbox Code Playgroud)
现在你跑git merge
,给你这个:
A-B-C-E-F
\ \
D---G < master
^
origin/master, master on remote
Run Code Online (Sandbox Code Playgroud)
所以现在你已经将master(E,F)上的更改与origin/master(D)上的新提交集成在一起.
git pull
只是上述步骤的快捷方式.
没有抓取的git合并
git merge origin/master
没有的运行git fetch
是没有意义的.如果没有a git fetch
,您的本地存储库不会意识到远程存储库上的任何潜在更改,并且origin/master将不会移动.所以你处于这种状态,其中D只在遥控器上并且不在本地:
origin/master
v
A-B-C-E-F < master
\
(D) < master on remote
Run Code Online (Sandbox Code Playgroud)
由于您的本地存储库没有D,git merge origin/master
因此只会产生:
Already up-to-date.
因为嘿,就本地存储库而言,master已经拥有origin/master中的所有内容.
什么是最好的?
以上都不是.:)
git fetch
git rebase origin/master master
Run Code Online (Sandbox Code Playgroud)
或者是一种捷径,git pull -r
但我个人更喜欢在改变之前看到这些变化.
这将在origin/master(D)之上重放您对master(E,F)的更改,而不会进行令人讨厌的合并提交.它产生:
A-B-C-D-E'-F' < master
^
origin/master, master on remote
Run Code Online (Sandbox Code Playgroud)
注意一切都是一行的,你准备好推,历史看起来不像友谊手镯.
一个警告 - 永远不会修改任何已被推送的提交.请注意,E&F在变基后成为E'&F'.提交完全被重写,使用新的SHA和一切.如果你重新定义已经公开的提交,开发人员将在他们提取时为他们重新编写历史记录.这太可怕了,每个人都会给你邪恶的眼睛并避开你.
小智 52
git pull
与git fetch
+ 相同git merge
命令
git pull <remote> <branch>
Run Code Online (Sandbox Code Playgroud)
真的就是一样的
git fetch <remote>
git merge <remote>/<branch>
Run Code Online (Sandbox Code Playgroud)
所以两者之间没有实际区别
git pull origin master
Run Code Online (Sandbox Code Playgroud)
和
git fetch origin
git merge origin/master
Run Code Online (Sandbox Code Playgroud)
在默认模式下,
git pull
是git fetch
后面的简写git merge
FETCH_HEAD
.更确切地说,git pull使用给定的参数运行git fetch并调用git merge以将检索到的分支头合并到当前分支中.
一个git pull
是要运行git fetch
,然后一个git merge
。如果您想通过运行本地存储库来加快本地存储库的运行速度。
A git fetch
将要从远程存储库导入提交而不合并它们,这使您有机会在集成之前对其进行检查。
归档时间: |
|
查看次数: |
50359 次 |
最近记录: |