Tot*_*tor 4 git conflict git-rebase
我想使用以下命令更改一个非常旧的提交消息:
git rebase -i sha1-of-commit^
Run Code Online (Sandbox Code Playgroud)
这很好,我做git commit --amend并编辑了消息,但是当我做的事情变得很糟糕时:
git rebase --continue
Run Code Online (Sandbox Code Playgroud)
我遇到了多个冲突,但是不明白为什么因为整个冲突解决方案显然已经在过去完成了,git应该继续前进,直到所有提交都被重新定位.
如何在不必处理这些旧冲突的情况下快速完成变更?我只是想改变一个简单的(和旧的)提交消息...
在您的/bin目录(或路径中的任何目录)中创建一个名为的小脚本git-reword-commit.(只要名称以此开头,您就可以将其命名为git-.无论是否存在合并提交,这都可以.
#! /bin/bash
REV=$1
MESSAGE=$2
FILTER="test $(echo '$GIT_COMMIT') = $(git rev-parse $REV) && echo $MESSAGE || cat"
git filter-branch --msg-filter "$FILTER" -- --all
Run Code Online (Sandbox Code Playgroud)
要使用,执行
git reword-commit <commit> 'new message'
Run Code Online (Sandbox Code Playgroud)
警告:这将重写许多提交,因此适用于rebase的相同问题也适用于此处,即,您需要在推送时强制执行,而其他用户将不得不知道这一点.
Git将您的原始引用(来自filter-branch之前)放入.git/refs/original.您可以使用以下别名来撤消/确认任何filter-branch命令.
git config alias.undo-filter-branch '! DIR=$(git rev-parse --git-dir); cp -r $DIR/refs/original/refs/ .git/; rm -r $DIR/refs/original/'
git config alias.confirm-filter-branch '! DIR=$(git rev-parse --git-dir); rm -r $DIR/refs/original/'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1323 次 |
| 最近记录: |