ChatGPT解决这个技术问题 Extra ChatGPT

合并到特定的提交

我从 git 中的 master 分支创建了一个名为 newbranch 的新分支。现在我已经做了一些工作,想将newbranch合并到master;但是,我对 newbranch 进行了一些额外的更改,并且我想将 newbranch 合并到倒数第四次提交到 master

我使用了 cherry-pick,但它显示了使用正确选项的消息:

git checkout master    
git cherry-pick ^^^^HEAD newbranch

我可以使用 git merge 来代替吗?

git merge newbranch <commitid>

m
mtyaka

当然,在 master 分支中,您需要做的就是:

git merge <commit-id>

其中 commit-id 是您希望在 master 分支中获得的来自 newbranch 的最后一次提交的哈希。

您可以通过执行 git help <command> 了解有关任何 git 命令的更多信息。在这种情况下它是git help merge。并且文档说 merge 命令的最后一个参数是 <commit>...,因此您可以传递对任何提交甚至多个提交的引用。虽然,我自己从来没有做过后者。


不仅是单个提交,而且是 commit-id 之前的所有提交
是的,它会合并从 newbranch 开始的所有提交,因为它的历史从 mastercommit-id 分支到 master 分支。您可以将 git merge <commit-id> 视为将一些以 commit-id 结尾的未命名分支合并到您当前的分支中。
我可以使用提交 ID 在除 master 之外的两个本地分支之间合并吗?
@skt,你可以,在使用 git merge 之前,在你想要合并的本地分支上。即说你想将提交 18a6fac 从分支 b2 合并到分支 b1 只需执行 git checkout b1; git merge 18a6fac
这似乎不起作用,如果我在一个我想合并到的分支上,并且还有其他一些带有提交 AB 和 C 的分支,并且我在 C 中合并,它只会获得在 C 中所做的更改,而不是 A 和 B。
t
tkruse

为了保持分支干净,你可以这样做:

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 上工作。


如果您需要一个能够创建 PR 的分支,这很有效。
E
ElasticCode

在当前分支文件夹中运行以下命令以从该 <commit-id> 合并到当前分支,--no-commit 不会自动进行新提交

git merge --no-commit <commit-id>

git merge --continue 只能在合并导致冲突后运行。

git merge --abort 中止当前的冲突解决过程,并尝试重建预合并状态。


K
Kiran Mohan

合并提交

我发现这是一种非常可靠的合并提交的方式。 “源”和“目标”分支永远不会被修改来进行合并(“目标”分支上的合并除外)。

假设您想将分支 src 合并到分支 dst,但只合并到特定的提交 ID commitId

git checkout src
git switch -c temp commitId        # create temporary branch at commitId
git switch -c dst             
git merge temp                     # merge temp branch to dst branch
git branch -d temp                 # remove temp branch as we dont need it anymore.

p
pid

最近我们遇到了类似的问题,不得不以不同的方式解决它。我们必须将两个分支合并为两个提交,这两个提交都不是两个分支的负责人:

branch A: A1 -> A2 -> A3 -> A4
branch B: B1 -> B2 -> B3 -> B4
branch C: C1 -> A2 -> B3 -> C2

例如,我们必须将分支 A 合并到 A2,将分支 B 合并到 B3。但是分支 C 有来自 A 和 B 的精选。当使用 A2 和 B3 的 SHA 时,由于本地分支 C 具有相同的 SHA,因此看起来有些混乱。

为了避免任何歧义,我们在本地删除了分支 C,然后从提交 A2 开始创建了一个分支 AA:

git co A
git co SHA-of-A2
git co -b AA

然后我们从提交 B3 创建了一个分支 BB:

git co B
git co SHA-of-B3
git co -b BB

那时我们合并了两个分支 AA 和 BB。通过删除分支 C 然后引用分支而不是它工作的提交。

我不清楚其中有多少是迷信,或者是什么使它真正起作用,但这种“长期方法”可能会有所帮助。


A
Andrey Rubshtein

要将特定分支合并到您的主分支,只需执行以下操作:

git reset --hard <commit Id> <-- 要合并的提交