vmj*_*vmj 13 git merge merge-conflict-resolution
我正在尝试将一个大主题分支合并到主服务器中,但我想要一个单独的提交来显示冲突解决方案是如何发生的.目标是让一个提交显示"这些文件冲突以及它们如何冲突",下一个提交将显示"这就是解决冲突的方式".即第一次提交将包含冲突标记.
原因是大主题分支已经过审查和测试,主分支也是如此.在合并中,我们只想查看需要一些工作的部分(冲突和其他合并工作).
这是我到目前为止所做的:
git checkout master
git checkout -b merge-from-topic
git merge topic
Run Code Online (Sandbox Code Playgroud)
要记录有冲突的文件,我使用临时文件:
git diff --name-only --diff-filter=U >conflicts.txt
Run Code Online (Sandbox Code Playgroud)
首先,我只是将带有冲突标记的文件添加到提交中:
xargs git add <conflicts.txt
git commit
Run Code Online (Sandbox Code Playgroud)
然后我创建另一个分支(用于审查目的),我想在其中进行冲突解决:
git checkout -b resolve-merge-from-topic
Run Code Online (Sandbox Code Playgroud)
为了恢复冲突,我试过了
xargs git reset HEAD^ -- <conflicts.txt
Run Code Online (Sandbox Code Playgroud)
但是后来git mergetool说没有文件需要合并,尽管我工作树中的文件有冲突标记.
如何恢复conflict.txt中列出的文件,以便我可以在它们上使用git mergetool?
我也对其他获得"单独提交冲突解决"效果的方式持开放态度.
git merge
会留下冲突标记。
然后,您(通常)调用git mergetool
(根据--tool
您的偏好)来解决冲突。大多数时候,这会导致阶段性的变化。这是你想要改变的(例如使用git reset
)。
现在单独提交“原始”合并,然后git add . && git commit -m 'resolutions'
添加git commit -am 'resolutions'
冲突解决方案。
请注意,这会使您在合并边界修订版中留下“损坏的”构建。
步骤:
git checkout -b be_merged # start a temp branch for the merge (safety)
git merge --no-commit diverge # initiate merge from a diverged branch
git status # shows conflicts
git mergetool # resolve them as always
git status # shows resolutions as staged
git reset # unstage the changes
git status # shows unstaged changes (good!)
git commit -m 'merge, conflicts pending' # commit the merge
git commit -am 'conflicts resolved' # commit the resolutions
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3773 次 |
最近记录: |