我知道这个问题已在此处提出:https://stackoverflow.com/questions/2329716/merging-changes-from-master-into-all-branches-using-git,但我希望看到真正的代码来执行此操作。
我有一个主分支和许多功能分支。我希望在master中做出的所有更改都会反映在所有功能分支中。
当我进入master时,所有的更改都应该反映在所有其他分支上(基本上它与检查所有分支并合并master,但是使用自动化过程相同)。
答案 0 :(得分:1)
问题是我需要查看我想要合并的分支是否未发布。
如果它们没有发表,你应该改变它们 但是检查一下实际上是否可以使用rebase是有点棘手的:
首先,在提取之后,您可以轻松查看if you have local commits not yet pushed:
git log origin/master..master
o--o--o (origin/master)
/
x--x--x--y--y (master)
在此实例中进行rebase是完全可以的,除非master
已经从你的回购中推送到另一个分支。
但您也可以通过以下方式轻松检查:
git branch -r --contains master
如果任何远程(-r
)分支包含您要重新分支的分支,那么这是一个不太安全的想法,并且合并更可取。
但是,如果远程分支本身被重新命名(并被强制推送),那么您需要小心,如“How do you deal with a public repository that has already been rebased?”中所述:
o--o--o (OLD origin/master)
/
x--x--X--y--y (master)
\
o'--o'--o' (origin/master, as seen after a 'git fetch')
在master
之上盲目重新origin/master
将重播提交X
,当origin/master
被重新定位时,被忽略。不好。
今天(2014年1月),处理此案件的唯一方法是:
origin/master
上创建'tmp'标记分支,git fetch
,git branch --contain tmp
是否列出了origin/master
(已被提取,如果已经重新定位并强制推送,则可能具有不同的历史记录)。明天(git 1.9,2014年第1季度),您无需在获取之前标记远程分支:
fork_point=$(git merge-base --fork-point origin/upstreamBranch yourBranch)
# return X
git rebase --onto origin/upstreamBranch $fork_point yourBranch
回顾一下:
在git fetch
之后(在提取之前标记origin/master
之后),
git log origin/master..master
返回master
的提交,这些提交不属于origin/master
(意味着那些本地提交尚未推送到origin/master
)git branch -r --contains master
为空(意味着master
未被推送到任何其他位置,则可以在任何远程跟踪分支上看到git fetch
)然后:
origin/master
包含标记分支“tmp
”(意味着origin/master
本身没有重新定位),则可以git rebase origin/master master
。git rebase --onto origin/master $(git merge-base tmp master) master
tmp
来重新绑定你的分支.Git 1.9将需要一个tmp分支不必要)在任何其他情况下:merge origin/master
至master
。