git - 查找在 git merge commit 期间冲突或本地编辑的文件

标签 git merge pre-commit

背景:我正在开发预提交工具。作为一名开发人员, 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/

相关文章:

git - 在 Git 中运行预提交 Hook 。有没有办法验证脚本是否正在运行?

macos - 如何存储多个 Github 帐户的钥匙串(keychain)凭据?

sql - EXCEPTION 后继续 MERGE

mysql - 在 SQL 中如何合并两个表而不丢失任何行?

algorithm - 查询N路归并算法的解决方案

Git 设置跳过某些文件的预提交 Hook

pre-commit - Husky 需要为每个新分支生成可执行文件

git - 更改分支的父级

git - 提交到 git 时更新文件中的文本

git状态说文件被删除但是git rm说错误: pathspec '.....' did not match any files