我正在寻找解析一些git日志以通过历史记录跟踪文件,我希望在每次迭代时运行一些工具(如cloc)。我在防御性地检查文件状态是否一致,并在处理时在每次提交时都有意义。我在回购中找到了一个文件我正在处理(Jekyll)日志似乎不一致。如果我跑:
git log --format=format:"%H, %at, %aE, %aN, %ce, %cN" --name-status --full-history --diff-filter=ACDMRTUXB -- test/test_generated_site.rb
...添加文件,然后修改,然后删除,然后继续修改,不再进行任何后续重新添加。此外,如果我查看file history in GitHub,则删除似乎没有发生。 git日志报告的状态更改在this gist中可见(日志输出是最新的 - 第一个,并且gist的链接转到相关的删除)。
更奇怪的是,它不像删除提交99098dd8c7bd5465ac97e18f35d6fcbb0ce241a2未在master中应用,因为其他更改仍保留在历史记录中(例如,请参阅5月18日提交给lib / jekyll / convertible.rb)
我显然遗漏了一些关于git log如何工作的东西,并且对于这种明显不一致的建议会感激不尽?理想情况下,我希望获得每个文件的所有状态更改的一致线性列表。
答案 0 :(得分:0)
我无法确认此特定示例的情况,但能够通过以下步骤重现该行为:
git init .
touch test_file
git add test_file && git commit -m "add test file"
git checkout -b a
git checkout -b b
git rm test_file && git commit -m "delete test file"
git checkout a
echo "edit" > test_file && git commit -am "edit test file"
git merge b
git checkout HEAD -- test_file
git commit -m "complete merge"
这会产生以下日志:
> git log --format=format:%H --name-status --diff-filter=ACDMRTUXB
92dfa538ba46b1e6fa40a385940b16d7d30729f5
M test_file
728a129c18bca0173c3699743408ee3b0b7a8e6c
D test_file
11f55702b525b3ba3b3886cd34e83c4e4b7a3737
A test_file
可以想象这已经发生了。我不会接受这个作为答案,而是接受一种可靠的方法来检测这种情况(或者说,这是不可能的理由)。