背景:我正在开发预提交工具。作为一名开发人员, pull 另一个开发人员的分支并让预提交 Hook 大声提示我什至没有接触过的文件可能会非常令人沮丧。
我希望在我的实现中能够做的是在 merge 提交的情况下只对冲突或由我手动编辑的文件运行 Hook em> 在 merge 冲突期间在本地。
到目前为止我尝试了什么:
git diff --staged
- 这是当前解决方案所做的但不正确,因为它包含所有文件,包括干净 merge 的文件。git diff MERGE_HEAD
- 这非常接近,但是如果我 merge 的分支是从 master 分支出来的 after 我做了,这包含了 master 的所有更改我还没有 merge 。.git/MERGE_MSG
包含冲突文件列表。这似乎是一个很好的起点,但不包含本地编辑的文件。- 提交后,
git show --name-only
得到我想要的东西。但为时已晚(毕竟我正在实现预提交 :D)
最佳答案
当您git add
解决冲突时,您会删除冲突记录。因此,要保留此信息而不必重建它,请保留索引文件:
cp .git/index .git/preserved-merge-index
然后
GIT_INDEX_FILE=.git/preserved-merge-index git ls-files --unmerged
将向您显示冲突,并且
GIT_INDEX_FILE=.git/preserved-merge-index git diff-files --name-only
将向您显示自 merge 索引中记录以来工作树中发生更改的所有内容。
从评论中,您还可以直接在 merge 中添加 文件。要捕获这些,在解决所有 merge 冲突后,您可以
GIT_INDEX_FILE=.git/preserved-merge-index git diff-index --name-only `git write-tree`
关于git - 查找在 git merge commit 期间冲突或本地编辑的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22903125/