日志消息中提到的git rebase和SHA

时间:2017-01-04 16:22:05

标签: git logging rebase sha

有时git commit的日志消息会提到其他提交的SHA。这种情况发生在git rebase --verbose的建议日志消息中,您也可以手动添加('修复了abcd0123'中提供的错误)。

当重新定位时,提交的SHA会发生变化。有没有办法可以自动修复日志消息以获得新的SHA?通常,在100%的情况下这可能是不可能的(提交可能会完全消失,被压扁等)。但是90%的时候,简单的rebase在原始提交和重新提交的提交之间保持一对一的对应关系,因此应该可以在日志消息中重新映射SHA。

我试过Applying: My log message here. old commit was 01234 new commit is abcde ,我希望打印出类似

的内容
--verbose

然后我可以使用它来手动调整日志消息(使用进一步的rebase ...这将反过来改变SHA ...所以它会很尴尬,但仍然可能)。但据我所知,git rebase不会打印比正常模式更多的信息。

是否有一些神奇的工具可以为我重新定义和重写日志消息?在没有小马的情况下,我是否可以说服cells[0].innerHTML = connections[0]; cells[1].innerHTML = connections[1]; cells[2].innerHTML = connections[2]; cells[3].innerHTML = connections[3]; cells[4].innerHTML = connections[4]; cells[5].innerHTML = connections[5]; cells[6].innerHTML = connections[6]; cells[7].innerHTML = connections[7]; cells[8].innerHTML = connections[8]; cells[9].innerHTML = connections[9]; cells[].style.backgroundColor = "red"; 打印有关新旧SHA的更多信息,以便我自己完成这项工作?

1 个答案:

答案 0 :(得分:1)

  

有时git提交的日志消息会提到其他提交的SHA [...]在重新定位时,提交的SHA会发生变化。有没有办法可以自动修复日志消息以获得新的SHA?

您可以使用git patch-id查找应用相同更改的提交,最强悍的方法是

git rev-list --no-merges --reflog --all \
| git diff-tree --stdin -p \
| git patch-id | sort > patch-ids

awk '{print $2,$1}' patch-ids | uniq -Df1

在您的仓库中查找应用类似补丁的每组提交。一些git log --grep=应用于结果,并且可能对你的rev-list args有一些限制,应该让你到达你想去的地方。

在GNU /任何用

替换uniq的东西上
uniq -f1 --all-repeated=separate | awk '{print $1}' | awk '{$1=$1; print}' RS=

为您分组提交ID。你可以使用join或更多的awking在其他地方达到相同的效果。

您可以将git notes添加到提交(或任何对象),如果您尝试分发有关所发生事件的警告,这可能会有所帮助。