乐闻世界logo
搜索文章和话题

Git 合并冲突过程中如何中止合并进度?

9 个月前提问
5 个月前修改
浏览次数78

6个答案

1
2
3
4
5
6

当在 Git 中遇到合并冲突时,如果您决定不继续完成合并过程,并希望中止合并,您可以使用以下命令来重置合并状态:

bash
git merge --abort

或者,在某些旧版本的 Git 中,您可能需要使用:

bash
git reset --merge

使用 git merge --abort 命令将会恢复到合并操作之前的状态,并尝试重建合并操作开始前的文件和索引的状态。

如果合并之前您的工作目录是干净的(没有未提交的改动),那么 git merge --abort 就会让您的工作目录回到合并操作之前完全一样的状态。如果合并操作之前有未提交的改动,那些改动依然会保留在工作目录中,但可能需要手动解决任何因合并操作引入的冲突。

例如,假设我在 feature 分支上开发了一项新功能,现在我想将这些改动合并到 master 分支。当我运行 git merge feature 时,我遇到了冲突。我意识到现在不是解决这些冲突的好时机,或者我决定采取不同的策略来整合这些变更,因此我决定中止合并。我就会运行 git merge --abort,这样我就可以回到合并之前的状态,重新考虑我的合并策略。

2024年6月29日 12:07 回复

由于您pull不成功,那么HEAD(not HEAD^) 是您分支上的最后一个“有效”提交:

shell
git reset --hard HEAD

您想要的另一部分是让他们的更改覆盖您的更改。

旧版本的 git 允许您使用“他们的”合并策略:

shell
git pull --strategy=theirs remote_branch

但正如Junio Hamano(Git 维护者)在本消息中所解释的那样,此内容已被删除。正如链接中所述,您可以这样做:

shell
git fetch origin git reset --hard origin
2024年6月29日 12:07 回复

如果您的 git 版本 >= 1.6.1,则可以使用git reset --merge.

另外,正如 @Michael Johnson 提到的,如果你的 git 版本 >= 1.7.4,你也可以使用git merge --abort.

与往常一样,请确保在开始合并之前没有未提交的更改。

来自git merge 手册页

git merge --abort相当于git reset --merge何时MERGE_HEAD存在。

MERGE_HEAD当合并正在进行时出现。

另外,关于开始合并时未提交的更改:

如果您不想在开始合并之前提交更改,只需git stash在合并之前以及git stash pop完成合并或中止合并之后提交即可。

2024年6月29日 12:07 回复

git merge --abort

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

如果合并开始时存在未提交的工作树更改,git merge --abort则在某些情况下将无法重建这些更改。因此,建议在运行 git merge 之前始终提交或存储更改。

git merge --abort相当于git reset --merge何时 MERGE_HEAD存在。

http://www.git-scm.com/docs/git-merge

2024年6月29日 12:07 回复

我想这是git reset你需要的。

请注意,这git revert意味着非常不同的东西,例如,svn revert在 Subversion 中,恢复将丢弃您的(未提交的)更改,将文件从存储库返回到当前版本,而git revert“撤消”提交。

git reset应该做相当于 的事情svn revert,即放弃不需要的更改。

2024年6月29日 12:07 回复

对于 git >= 1.6.1:

shell
git merge --abort

对于旧版本的 git,这可以完成工作:

shell
git reset --merge

或者

shell
git reset --hard
2024年6月29日 12:07 回复

你的答案