可以中断/重写历史的Git命令
您能提供一个列表(所有或最常见的)可能破坏git历史记录的操作或命令吗 什么是绝对应该避免的可以中断/重写历史的Git命令,git,github,git-rewrite-history,Git,Github,Git Rewrite History,您能提供一个列表(所有或最常见的)可能破坏git历史记录的操作或命令吗 什么是绝对应该避免的 推送此提交后修改提交(git-commit/git-push/git-commit--Amend) 向已经推动的方向重新调整 我希望这个问题(如果它以前没有在其他地方问过的话)成为git上常见的可避免操作的某种参考 此外,我经常使用git reset,但我并不完全清楚我可能对存储库(或其他贡献者副本)造成的损害。git重置会有危险吗?从我的头顶: git提交--amend将重新写入上一次提交 git-
git-commit
/git-push
/git-commit--Amend
)此外,我经常使用
git reset
,但我并不完全清楚我可能对存储库(或其他贡献者副本)造成的损害。git重置会有危险吗?从我的头顶:
将重新写入上一次提交git提交--amend
可以重写多个提交(使用带有git-rebase
标志或--rebase
配置选项的分支$name.rebase
时也会调用rebase)git-pull
可以重写多个提交git筛选器分支
可以更改提交一个分支指向的位置(git-push-origin+branch的语法也是如此)git-push-f
可以将提交分支点更改为git reset
可以更改提交分支所指向的位置(通过重新创建同名分支)git branch-f
可以更改提交分支所指向的位置(通过重新创建同名分支)git checkout-B
.git/objects/
的内容),但这些都超出了我的回答范围
您可以通过各种方式重写本地回购的历史记录。ProGit书籍中题为的部分提到了一些
git-amend--commit
git-rebase
git过滤器分支
- Roberto Tyley的BFG回购清理器(第三方工具)
:替换上一次提交李>git提交--amend
- 所有形式的rebase(包括git pull--rebase)李>
(参见下面的示例)李>git重置
和git checkout-B
:将现有分支重置为其他提交李>git branch-f
:重新创建具有相同名称但可能指向另一个提交的标记git标记--force
或git branch-d
git branch-d
git标签-d
git push-f
(相当于git push--force
)有可能重写/删除远程存储库中的历史记录
也就是说,有可能
- 通过在服务器上设置
,禁用将远程分支强制更新为非快进引用的功能receive.denynonfastforts
- 通过在服务器上设置
,禁用删除位于远程存储库上的分支的功能receive.denyDeletes
此外,我经常使用
git reset
,但我并不完全清楚我可能对存储库(或其他贡献者副本)造成的损害。git重置
会有危险吗
如所述,git reset
,通常会更改分支参考点的位置。此命令可能很危险,因为它会使可访问的提交变得不可访问。因为图片能说出一千个单词,请考虑以下情况:
您在master
分支上,该分支指向commitD
。比如说,你跑步
git reset master~2
软重置被认为是最温和的重置形式,因为它“仅”更改当前分支指向的位置,但不会影响临时区域或工作树。也就是说,仅仅以这种方式更改分支指向的位置就会产生影响:在软重置之后,您将以
在重置之前可从master
访问的提交C
和D
,现在已无法访问;换句话说,它们不是任何引用(分支、标记或头)的祖先。你可以说他们处于“存储库的边缘
git fast-export <options> | filter | git fast-import <options>