首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用“`git”删除中间的提交

使用“`git”删除中间的提交
EN

Stack Overflow用户
提问于 2016-07-19 21:00:16
回答 1查看 1.3K关注 0票数 0

我试图在中间撤消提交,同时保持下列提交不变。在找到这些帖子之前,我曾想过这可能是不可能的:Post 1 & Post 2。(最终的目标可能是重复的,但我确实没有做到。我对此表示歉意。

不幸的是,我仍然停留在如何正确使用git rebase -i上。我创建了一个示例回购,如下所示:

代码语言:javascript
运行
复制
commit cc2576365a9716bb9f96e195e599190d3c70fba0
Author: zzy
Date:   Sun Jul 17 14:30:53 2016 -0400
commit #3

commit 11d9f8fdc69be8b4530e4b70c9661b4e34287afe
Author: zzy
Date:   Sun Jul 17 14:30:36 2016 -0400
commit #2

commit 4770e08eb54d0d582bd4b391f2361a328b417cdf
Author: zzy
Date:   Sun Jul 17 14:29:58 2016 -0400
commit #1

每次提交都会在一个名为a的文件中添加一个新行(请参阅下面a的内容):

在提交后#1

代码语言:javascript
运行
复制
1

在提交后#2

代码语言:javascript
运行
复制
1
2

在提交后#3

代码语言:javascript
运行
复制
1
2
3

现在我打算删除提交#2,a应该如下所示:

代码语言:javascript
运行
复制
1
3

我尝试了命令作为git rebase -i 11d9f8fdc69be8^,并获得了文本文件如下:

代码语言:javascript
运行
复制
pick 11d9f8f commit #2
pick cc25763 commit #3

我删除了第一行,只保留提交#3并退出文件。但我得到了以下错误:

代码语言:javascript
运行
复制
error: could not apply cc25763... commit #3

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
Could not apply cc2576365a9716bb9f96e195e599190d3c70fba0... commit #3

文件a变成:

代码语言:javascript
运行
复制
1
<<<<<<< HEAD
=======
2
3
>>>>>>> cc25763... commit #3

我搞不懂为什么2还在这里,为什么会有冲突。有人能帮我得到预期的结果吗?提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-19 21:13:34

基本上,由于commit #2和commit #3都更改了在同一个文件中彼此非常接近的行,所以git不太知道如何“重播”提交#3中的更改,因为提交#2已不再存在,因此出现了冲突。

在包含冲突的文件中,您可以看到以下内容:

代码语言:javascript
运行
复制
<<<<<<< HEAD
=======
2
3
>>>>>>> cc25763... commit #3

<<<<<<< HEAD=======之间的空格显示了该位置在提交#1、提交#2或提交#3之前包含的文件。在提交#2和提交#3之后,=======>>>>>>> cc25763... commit #3之间的空格包含提交#3中文件中该部分的内容。Git希望您使用这些信息来手动决定提交#3的新版本应该包含哪些内容,现在您正在尝试在没有提交#2的情况下重放它。

在重放commit #3之后,将文件的整个部分替换为您希望文件包含的内容。在这种情况下,您可以替换:

代码语言:javascript
运行
复制
<<<<<<< HEAD
=======
2
3
>>>>>>> cc25763... commit #3

通过以下方式:

代码语言:javascript
运行
复制
3

然后,运行git add a以完成这些更改,并运行git rebase --continue以继续进行重基。

请注意,当遇到冲突时,您只需在重基期间执行此操作。对于更改不相关的内容的提交(例如,如果提交#2和#3正在更改完全不同的文件,或者同一个文件的完全不同的部分),git rebase通常可以确定要自动进行哪些更改,并且不会遇到冲突。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38468446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档