Git branch diff进入一个新的提交

时间:2013-02-14 21:34:13

标签: git github

所以,假设我有一个主分支,我们称之为'主'。我做了一个分支,称为“新功能”。我已经在这个分支中做了大量的提交,所以我可以回到过去,但是我在开发这个功能时已经做了很多来回,所以提交日志非常混乱。

如果我要看 git diff master..new-feature 例如。

如果我想在'master'上创建一个新的提交,其中包括两个分支之间的所有更改,那么最有效的方法是什么?

5 个答案:

答案 0 :(得分:26)

git checkout master
git merge --squash new-feature
git commit

提交消息将开始显示整个提交列表 合并/压缩,但您当然可以将其编辑为您想要的任何内容。

答案 1 :(得分:3)

可能更适合您的另一个选项是使用git diff --patch > "patch filename"生成补丁文件,然后使用git apply "patch file name"将其修补到主分支中。

git-diff的手册页(特别是“使用-p生成补丁”): http://www.kernel.org/pub/software/scm/git/docs/git-diff.html

git-apply的手册页: http://www.kernel.org/pub/software/scm/git/docs/git-apply.html

答案 2 :(得分:1)

您可以为此使用交互式rebase:git rebase --interactive。然后只使用壁球选项。它仅使用提交中的更新,但不创建提交。

答案 3 :(得分:1)

使用git rebase --interactive HEAD~(但是很多提交想要压缩)。例如,git rebase --interactive HEAD~5。这将加载您的最后5次提交并打开包含消息的编辑器窗口。每条消息都会在开头有“选择”。转到最后一条消息,将'pick'改为'squash'并退出。将打开一个新窗口,询问提交消息。这将是壁球提交的新提交消息。退出并将所有提交压缩为一个新提交。

这里有一个例子: https://ariejan.net/2011/07/05/git-squash-your-latests-commits-into-one

答案 4 :(得分:0)

您可以在功能分支中提交所有内容,然后合并为主人接受所有更改的“他们的”。

这是一个Stack Overflow问题,对如何做到这一点有很好的答案: Is there a "theirs" version of "git merge -s ours"?