问题是我需要看看我想合并的分支是否未发布。
如果他们没有发布,你应该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)
也完全可以在这种情况下,以变基,除非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')
上origin/master
顶部将重播犯下盲目master
衍合X
,这是遗漏了当origin/master
重新装修。不好。
今天(2014年1月),来处理这种情况下,唯一的办法就是:
- 就
origin/master
一个 'TMP' 标记的分支,
git fetch
,
- 检查,如果
git branch --contain tmp
名单origin/master
(已经被提取,如果被重新发布并被强制推送,可能会有不同的历史记录)。
明天(git 1。9,2014年第一季度),你不会有读取前,以纪念你的远程分支:
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
部分(指那些本地COM MITS尚未推到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
。
在你给的链接中,下一个答案是“对于$(ls .git/refs/heads)中的BRANCH;执行git rebase master $ BRANCH; done”。该代码缺少什么? –
我有点害怕做rebase,尤其是在所有分支上,这可能会导致未来更大的问题:http://www.git-scm.com/book/en/Git-Branching-Rebasing#The - 重新装箱。问题是我需要查看我想合并的分支是否未发布。 – edi9999
好吧,那么对于$(ls .git/refs/heads)中的BRANCH;执行git checkout $ BRANCH; git merge master; done“。如果这仍然是可怕的:你可以简单地保留一个名为“branches_to_merge.txt”的文件,其中包含你想与主合并的所有分支;然后在$(cat branches_to_merge.txt)中使用“for BRANCH”;执行git checkout $ BRANCH; git merge master; done“ –