我从git的master
分支创建了一个名为newbranch
的新分支。现在我做了一些工作,想把newbranch
合并到master
;但是,我对newbranch
做了一些额外的更改,并且我想将newbranch
合并到master
,从最后一次提交到第四次提交。
我使用了cherry-pick
,但它显示了使用正确选项的消息:
git checkout master
git cherry-pick ^^^^HEAD newbranch
我可以用git merge
来代替吗?
git merge newbranch <commitid>
当然,在master
分支中,您需要做的就是:
git merge <commit-id>
其中commit-id
是newbranch
最后一次提交的哈希值,你想在master
分支中获得。
您可以通过执行git help <command>
找到更多关于任何git命令的信息。在这种情况下,它是git help merge
。文档说merge
命令的最后一个参数是<commit>...
,所以你可以传递引用到任何提交,甚至多个提交。不过,我自己从来没有做过后者。
为了保持分支干净,您可以这样做:
git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2
这样,newbranch将在它被合并到master的地方结束,而你继续在newbranch2上工作。
合并提交
我发现这是一个非常可靠的方式来合并到一个提交。"source"one_answers";target"分支永远不会被修改(除了"目标"上的合并)。分支)。
假设您想将分支src
合并到分支dst
,但仅限于特定的提交id commitId
git checkout src
git branch temp commitId # create temporary branch at commitId
git switch dst
git merge temp # merge temp branch to dst branch
git branch -d temp # remove temp branch as we dont need it anymore.
运行以下命令到当前分支文件夹,从<commit-id>
合并到当前分支,--no-commit
不会自动进行新的提交
git merge --no-commit <commit-id>
git merge --continue
只能在合并导致冲突后运行。
git merge --abort
终止当前冲突解决进程,并尝试重构合并前状态
最近我们遇到了一个类似的问题,不得不用不同的方法来解决它。我们必须将两个分支合并为两个提交,这两个提交都不是分支的头:
branch A: A1 -> A2 -> A3 -> A4
branch B: B1 -> B2 -> B3 -> B4
branch C: C1 -> A2 -> B3 -> C2
例如,我们必须合并分支A到A2,分支B到B3。当使用A2和B3的SHA时,由于本地分支C具有相同的SHA,因此看起来存在混淆。
为了避免歧义,我们在本地删除了分支C,然后创建了从提交A2开始的分支AA:
git co A
git co SHA-of-A2
git co -b AA
然后我们从commit B3创建了一个分支BB:
git co B
git co SHA-of-B3
git co -b BB
在这一点上,我们合并了两个分支AA和BB。通过删除分支C,然后引用分支而不是它工作的提交。
我不清楚这其中有多少是迷信,或者到底是什么让它起作用的,但这种"漫长的方法"。可能会有帮助。
要将一个特定的分支合并到你的主分支,只需这样做:
git reset --hard <commit Id>
<—您想要合并的提交