仅将分支中的最后一次提交合并到master

时间:2019-05-08 11:40:17

标签: git github git-branch git-merge

我使用以下命令创建了一个测试库

mkdir test-repo
cd test-repo/
git init

我在目录中创建了一个文件并提交了更改

echo 0 > file.txt
git add file.txt
git commit -m '0'

我做了一个新的开发分支

git checkout -b A

现在在分支A中更改了文件,在下一行添加了“ 1”

file.txt
0
1

已承诺到分支A

git add file.txt
git commit -m '1'

在“ A”中添加了一个空的新文件file1.txt。然后提交

git add file1.txt
git commit -m 'new file'

现在reflog命令显示为

76633b7 (HEAD -> A) HEAD@{0}: commit: new file
070f015 HEAD@{1}: commit: 1
dfab60f (master) HEAD@{2}: checkout: moving from master to A
dfab60f (master) HEAD@{3}: commit (initial): 0

现在,我想合并分支A以仅使用'76633b7'(最后一个)提交。我不想在主机中使用'commit:1'(070f015)。我怎样才能做到这一点?。 git merge A会将所有更改提交给主服务器。

3 个答案:

答案 0 :(得分:2)

有两种情况。

1)您只想将最后一次提交(76633b7)合并到master。    -在这种情况下,只需遵循

 i)  git checkout master
 ii) git cherry-pick 76633b7

2)您想要master中分支A的所有内容,但第二次提交除外。    -这有点棘手,在这种情况下,您必须执行以下操作

 i) Change the order of last and second last commit


  git rebase -i HEAD~2

  Next, change the order of the commits in the prompt.

  pick 76633b7 
  pick 070f015

  to 

  pick 070f015
  pick 76633b7 

现在,您的第二个提交位于顶部,您要合并的所有其他内容都位于第二个提交以下。

ii)现在,您可以简单地使用旧的第一次提交(现在是第二个提交)的提交ID进行合并

git merge 76633b7

答案 1 :(得分:0)

没有直接的解决方案。您的提交76633b7取决于提交070f015,理论上可能取决于您在此处所做的事情。

您可以做什么:

git checkout -b B master # create a new branch B from master
git cherry-pick 76633b7 # apply the commit 76633b7 and resolve conflicts if any

现在B分支仅包含您要合并到master中的提交。

答案 2 :(得分:0)

您可以将修订版本的ID提供给cherry-pick(如前所述),但是如果您要求选择Cherry

一个分支,则只会选择最后一个修订版本,因此也可以:

git checkout master
git cherry-pick A