我使用以下命令创建了一个测试库
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会将所有更改提交给主服务器。
答案 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