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

5fjcxozz  于 2023-01-28  发布在  Git
关注(0)|答案(4)|浏览(363)

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

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合并到master,只需要提交'76633b7'(最后一个)。我不想把'commit:1'(070f015)合并到master。我该怎么做?. git merge A会把所有修改提交到master。

uqcuzwp8

uqcuzwp81#

有两种情况。
1)你只想合并最后一次提交(76633 b7)到master. -在这种情况下,只需执行以下操作

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

2)你想从分支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
rjee0c15

rjee0c152#

您可以提供修订版本的id给cherry-pick(如前所述),但如果您要求cherry-pick *a分支 *,则只有最后一个修订版本会被cherry-pick,因此这也可以正常工作:

git checkout master
git cherry-pick A
yizd12fk

yizd12fk3#

对于这个问题没有直接的解决方案,你的提交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分支只包含你想合并到主分支的提交。

bbuxkriu

bbuxkriu4#

为了合并来自另一个分支的最新提交,你可以使用cherry pick,后面跟着你想要挑选最新提交的分支名称。
https://git-scm.com/docs/git-cherry-pick#_examples 在master分支的顶端应用由提交引入的更改,并使用此更改创建一个新的提交。

git checkout develop // the branch you want to merge commit into
git cherry-pick master // the branch you want to get commit from

我尝试使用git cherry-pick commitid,但这样我得到错误:commit commitid is a merge but no -m option was given.然而,通过使用cherry-pick分支名称,我能够成功地将最新提交合并到分支中。

相关问题