我是Git的新手,现在我处于这种情况:
master
改变了我需要的内容......这是我的问题:如何使用master
分支代码更新所有其他分支?
答案 0 :(得分:525)
您有两种选择:
第一个是合并,但这会为合并创建额外的提交。
结帐每个分支:
git checkout b1
然后合并:
git merge origin/master
然后推:
git push origin b1
或者,你可以做一个rebase:
git fetch
git rebase origin/master
答案 1 :(得分:427)
您基本上有两种选择:
您合并。这实际上很简单,也是一个完美的本地操作:
git checkout b1
git merge master
# repeat for b2 and b3
这保留了历史记录:您从master中分叉,对所有分支进行了更改,最后将master中的更改合并到了所有三个分支中。
git
可以很好地处理这种情况,它专为同时发生在各个方向的合并而设计。您可以相信它能够正确地将所有线程组合在一起。它根本不关心分支b1
是否合并master
,或master
合并b1
,合并提交看起来与git完全相同。唯一的区别是,哪个分支最终指向此合并提交。
你改变了。具有SVN或类似背景的人发现这更直观。命令类似于合并情况:
git checkout b1
git rebase master
# repeat for b2 and b3
人们喜欢这种方法,因为它在所有分支中都保留了线性历史记录。然而,这种线性历史是谎言,你应该意识到它是。考虑一下这个提交图:
A --- B --- C --- D <-- master
\
\-- E --- F --- G <-- b1
合并会产生真实的历史记录:
A --- B --- C --- D <-- master
\ \
\-- E --- F --- G +-- H <-- b1
然而,rebase给你这个历史:
A --- B --- C --- D <-- master
\
\-- E' --- F' --- G' <-- b1
重点是,提交E'
,F'
和G'
从未真正存在过,而且可能从未经过测试。他们甚至可能无法编译。实际上通过rebase创建无意义的提交非常容易,尤其是当master
中的更改对b1
中的开发很重要时。
这样做的结果可能是,您无法区分三个提交中的哪一个E
,F
和G
实际引入了回归,从而减少了git bisect
。
我并不是说你不应该使用git rebase
。它有它的用途。但是每当你使用它时,你需要意识到你在撒谎的事实。你应该至少编译测试新的提交。
答案 2 :(得分:230)
git rebase master
是执行此操作的正确方法。合并意味着将为合并创建提交,而不进行重组。
答案 3 :(得分:46)
如果您一直在分支机构上工作,或者在您开展某项工作时在其他分支机构中发生了很多事情,那么最好将您的分支机构重新分配到主服务器上。这使历史保持整洁,使事情更容易遵循。
git checkout master
git pull
git checkout local_branch_name
git rebase master
git push --force # force required if you've already pushed
注意:
在http://git-scm.com/book/ch3-6.html有一个关于变基的章节,以及网上有大量其他资源。
答案 4 :(得分:13)
git checkout master #
git pull # update local master from remote master
git checkout <your_branch>
git merge master # solve merge conflicts if you have`
您不应重写分支历史记录,而应将其保留在实际状态以供将来参考。在合并到master时,它会创建一个额外的提交,但这很便宜。提交不需要花费。
答案 5 :(得分:12)
使用主分支副本更新其他分支,例如(备份)。 你可以按照任何一种方式(rebase或merge)......
合并分支(会自动进行额外的提交 备份分支)。
注意:Rebase只是建立一个新的基础(一个新的副本)
git checkout backup git merge master git push
(重复其他分支,如有任何类似backup2&amp; etc ..,)
git checkout backup git rebase master git push
(重复其他分支,如有任何类似backup2&amp; etc ..,)
答案 6 :(得分:9)
您可以合并,也可以使用git cherry-pick在分支机构中应用单个提交。
答案 7 :(得分:5)
要通过母版更新您的分支机构:
git checkout master
git pull
git checkout your_branch
git merge master
答案 8 :(得分:1)
有两个选项可以解决此问题。
1)git rebase
2)git merge
在合并的情况下,只有两者同时使用diff才会在历史记录中有额外的提交
1)git checkout分支(b1,b2,b3)
2)git rebase起源/主服务器(如果发生冲突,可以通过执行git rebase --continue在本地解决)
3)git push
或者,git merge选项是类似的方式
1)git checkout“ your_branch”(b1,b2,b3)
2)git merge master
3)git push
答案 9 :(得分:1)
在对抗大师之后,需要大力推动