Ion*_*icu 631 git git-branch
我是Git的新手,现在我处于这种情况:
master......这是我的问题:如何使用master分支代码更新所有其他分支?
Chr*_*ken 576
您有两种选择:
第一个是合并,但这会为合并创建额外的提交.
结帐每个分支:
git checkout b1
Run Code Online (Sandbox Code Playgroud)
然后合并:
git merge origin/master
Run Code Online (Sandbox Code Playgroud)
然后推:
git push origin b1
Run Code Online (Sandbox Code Playgroud)
或者,你可以做一个rebase:
git fetch
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)
cma*_*ter 459
你基本上有两个选择:
你合并.这实际上非常简单,并且是一个完美的本地操作:
git checkout b1
git merge master
# repeat for b2 and b3
Run Code Online (Sandbox Code Playgroud)
这样就完全保留了历史记录:您从master中分叉,对所有分支进行了更改,最后将master中的更改合并到了所有三个分支中.
git可以很好地处理这种情况,它是专为在各个方向发生的合并而设计的.您可以相信它能够正确地将所有线程组合在一起.它根本不关心分支b1合并master或master合并b1,合并提交看起来与git完全相同.唯一的区别是,哪个分支最终指向此合并提交.
你的变形.具有SVN或类似背景的人发现这更直观.命令类似于合并情况:
git checkout b1
git rebase master
# repeat for b2 and b3
Run Code Online (Sandbox Code Playgroud)
人们喜欢这种方法,因为它在所有分支中保留了线性历史.然而,这种线性历史是谎言,你应该意识到它是.考虑这个提交图:
A --- B --- C --- D <-- master
\
\-- E --- F --- G <-- b1
Run Code Online (Sandbox Code Playgroud)
合并导致真实的历史:
A --- B --- C --- D <-- master
\ \
\-- E --- F --- G +-- H <-- b1
Run Code Online (Sandbox Code Playgroud)
然而,rebase给你这个历史:
A --- B --- C --- D <-- master
\
\-- E' --- F' --- G' <-- b1
Run Code Online (Sandbox Code Playgroud)
关键是,提交E',F'并且G'从未真正存在,并且可能从未经过测试.他们甚至可能无法编译.通过rebase创建无意义的提交实际上非常容易,特别是当改变master对于开发很重要时b1.
这样做的结果可能是,你无法分清哪三个提交的E,F和G实际上引入了回归,减少的价值git bisect.
我不是说你不应该使用git rebase.它有它的用途.但是每当你使用它时,你需要意识到你在撒谎的事实.你应该至少编译测试新的提交.
Mic*_*ray 234
git rebase master是这样做的正确方法.合并意味着将为合并创建提交,而重新设置则不会.
小智 50
如果您一直在分支机构上工作,或者在您从事某些工作时在其他分支机构中发生了很多事情,那么最好将您的分支机构重新设置为主机.这使历史保持整洁,使事情更容易遵循.
git checkout master
git pull
git checkout local_branch_name
git rebase master
git push --force # force required if you've already pushed
Run Code Online (Sandbox Code Playgroud)
笔记:
在http://git-scm.com/book/ch3-6.html上有一章关于变基的内容,以及网上的大量其他资源.
小智 16
@cmaster做了最精心的回答.简单来说:
git checkout master #
git pull # update local master from remote master
git checkout <your_branch>
git merge master # solve merge conflicts if you have`
Run Code Online (Sandbox Code Playgroud)
您不应该重写分支历史记录,而是将它们保持在实际状态以供将来引用.在合并到master时,它会创建一个额外的提交,但这很便宜.提交不需要花费.
小智 12
使用主分支副本更新其他分支,例如(备份).你可以按照任何一种方式(rebase或merge)......
合并分支(将自动额外提交到备份分支).
注意:Rebase只是建立一个新的基础(一个新的副本)
Run Code Online (Sandbox Code Playgroud)git checkout backup git merge master git push
(如果有任何类似backup2等的话,请重复其他分支..)
Run Code Online (Sandbox Code Playgroud)git checkout backup git rebase master git push
(如果有任何类似backup2等的话,请重复其他分支..)
Gon*_*ica 12
令人惊讶的是,我使用的最常用方法没有被提及。在基于主干的开发风格中,这种情况很常见,这种风格master不断更新,并且从其中的一个分支开始工作。
假设master已经有了更新的代码并且您位于分支中b1。如果情况并非如此,您将需要git fetch.
因此,要更新b1中所做的更改master,您只需使用以下代码即可提取代码
git pull origin master
Run Code Online (Sandbox Code Playgroud)
当您或其他人访问其他分支并想要更新时,也必须在其他分支中执行相同的操作。
有两种方法
您想将 master 分支合并到您的分支中
- git checkout master
- git pull
- git checkout your-feature-branch
- git merge master //resolve conflicts if any and commit
- git push
Run Code Online (Sandbox Code Playgroud)
2:如果您想在 main 之上重新调整您的更改。
git checkout master #Switch to main branch
git pull #Take latest
git checkout your-feature-branch #Switch to story branch
git pull --ff-only # Ensure branch is up to date
git rebase -i origin master #Interactively rebase your commits on top of master. So your changes are on top of latest commits in main.
git rebase --continue #Resolve conflicts and rebase --continue to continue with next commits
git push -f origin your-feature-branch # As you have rewritten the commit history, you have to **force push** the commits
Run Code Online (Sandbox Code Playgroud)
小智 6
从主更新你的分支:
git checkout master
git pull
git checkout your_branch
git merge master
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
587711 次 |
| 最近记录: |