gpt4 book ai didi

git - 什么会导致 "number of commits ahead"在 rebase 后发生变化?

转载 作者:太空狗 更新时间:2023-10-29 13:57:19 26 4
gpt4 key购买 nike

在 rebase 一个我几周没碰过的特性分支之前,它比 master 提前了 25 次提交。 rebase 后,现在是 18 次提交。一路上我不得不解决几个冲突。可能正好是 7。

是什么导致了这个数字的变化?沿途发现并变成 NOOP 提交的 cherry-pick ?上面提到的冲突解决方案?

最佳答案

这有几种可能发生的方式 - 这不是一个详尽的列表,但应该让您了解这是如何发生的:

1。精心挑选的提交

首先,您提到来自您的分支的提交被精心挑选到您要 rebase 的上游分支的可能性:只是为了确认这一点,git rebase 将跳过任何此类提交,这可能是部分差异的原因。在 VonC 中还有更多内容对 this question 的回答.

2。冲突完全解决到上游版本

我最初的怀疑是,发生的事情是,当您重新设置基准并看到冲突时,您总是通过选择上游版本而不是您的更改来解决它们。 (如果这没有响起,那么我的怀疑可能是完全错误的:))如果该提交没有引入其他非冲突更改,那么您的冲突解决方案将要做的就是使树相同就像它在尝试应用您的更改中的补丁之前一样,因此无需提交任何内容。

不幸的是,发生这种情况时 git 给你的提示可能相当困惑。这是您将在 git 1.7.1 中看到的示例。首先,提交一项与尚未从 origin/master merge 的更改发生冲突的更改:

$ git commit
[master 1efa20f] Add a change designed to conflict
1 files changed, 1 insertions(+), 1 deletions(-)

...现在开始 rebase :

$ git rebase origin/master 
First, rewinding head to replay your work on top of it...
Applying: Add a change designed to conflict
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging src-plugins/3D_Viewer/ij3d/Image3DUniverse.java
CONFLICT (content): Merge conflict in src-plugins/3D_Viewer/ij3d/Image3DUniverse.java
Failed to merge in the changes.
Patch failed at 0001 Add a change designed to conflict

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

看看冲突是什么:

$  git diff
diff --cc src-plugins/3D_Viewer/ij3d/Image3DUniverse.java
index 36ec046,f4841ec..0000000
--- a/src-plugins/3D_Viewer/ij3d/Image3DUniverse.java
+++ b/src-plugins/3D_Viewer/ij3d/Image3DUniverse.java
@@@ -264,7 -264,7 +264,11 @@@ public class Image3DUniverse extends De
public void cleanup() {
timeline.pause();
removeAllContents();
++<<<<<<< HEAD
+ contents.clear();
++=======
+ contents.clear(); // A change designed to conflict
++>>>>>>> Add a change designed to conflict
universes.remove(this);
adder.shutdownNow();
executer.flush();

我决定我喜欢上游的版本,所以编辑文件来解决这个问题:

$  vim src-plugins/3D_Viewer/ij3d/Image3DUniverse.java

分阶段解决该冲突:

$ git add src-plugins/3D_Viewer/ij3d/Image3DUniverse.java

现在尝试像往常一样继续 rebase :

$ git rebase --continue
Applying: Add a change designed to conflict
No changes - did you forget to use 'git add'?

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

我认为在较新版本的 git 中,它表明您可能刚刚解决了对现有内容的提交,您应该考虑执行 git rebase --skip。然而,通常人们会发现这是摆脱这种情况的唯一方法,所以:

$  git rebase --skip
HEAD is now at f3a2de3 3D Viewer: Avoid NPE when closing the viewer window.
Nothing to do.

该提交现在不会出现在 git log 中。

3。 merge 提交

您在下面的评论中提到,您在之后检查两个分支时看到了多个 merge 提交 - 这也可能是缺少提交的原因,因为 git rebase 默认情况下会忽略任何 merge 提交准备其提交列表以重新应用到上游。

关于git - 什么会导致 "number of commits ahead"在 rebase 后发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com