如何解决git合并冲突以支持拉取的更改?

我希望从工作树中删除所有冲突的更改,而不必使用gitmergetool处理所有冲突,同时保持所有无冲突的更改。最好是,我想在拉的时候做,而不是事后。


当前回答

我发现我需要指定origin-main作为要合并到的分支。

git merge **origin main** --strategy-option theirs

其他回答

请注意,有时这是行不通的:

git checkout--我们的路径/to/file

or

git checkout--他们的路径/to/file

我改为这样做,假设HEAD是我们的,MERGE_HEAD是他们的

git checkout HEAD -- path/to/file

or:

git checkout MERGE_HEAD -- path/to/file

在我们这样做之后,我们很好:

git add .

如果你想了解更多,请点击此处查看精彩的torek帖子:git checkout--我们不会从未合并文件列表中删除文件

如果您已经处于冲突状态,并且不想逐个签出路径。你可以试试

git merge --abort
git pull -X theirs

在Emacs使用smerge模式中,为了使用我的或他们的冲突标记来解决所有冲突标记,我们可以定义:

(defun aj/smerge-keep-mine-all ()
  ""
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (while (ignore-errors 'user-error (progn (smerge-next) t))
      (smerge-keep-mine))))

(defun aj/smerge-keep-other-all ()
  ""
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (while (ignore-errors 'user-error (progn (smerge-next) t))
      (smerge-keep-other))))

如果你已经处于冲突状态,并且你想接受他们的一切:

git checkout --theirs .
git add .

如果你想做相反的事情:

git checkout --ours .
git add .

这是非常激烈的,所以在做这件事之前,一定要确保你真的想把所有的东西都这样抹掉。

我发现我需要指定origin-main作为要合并到的分支。

git merge **origin main** --strategy-option theirs