[英]Git rearrange root commit and second commit
我正在学习如何使用GIT和Bitbucket。 Bitbucket Admin(不是我)创建了一个远程存储库。
在此存储库中,我已将更改'A'提交给Master分支(这现在是存储库中的root / parent / first commit)。
现在,我向Master分支提交了另一个更改“ B”。 如何在远程和本地存储库中重新排列提交并清除所有以前的首次提交历史记录?
在Bitbucket中,它应如下所示:
之前:在Master分支中
B“新提交”
“初始提交”
之后:在Master分支中
“初始提交”
B“新提交”
提交'B'应该是第一次/初始提交,但我不小心将更改推错了方向。
是否可以使用git命令纠正此问题?
最好的一般答案是,您应该执行git revert
功能上撤消第一次提交A
:
git revert <SHA-1 of A commit>
要查找A
的提交哈希,只需键入git log
并搜索第一个提交的哈希。 它看起来像3kd983ngl74ok
。
这将向您的master
分支添加一个新的提交,从功能上撤消添加了A
提交的任何内容。 因此,您的master
分支现在将如下所示:
master: A -- B -- R
其中R
是新的还原提交。 但是, master
分支的行为就像A
从未发生过。
假设您已经在存储库中发布了分支,这是最安全的选择。
这里的另一种可能性是进行交互式变基,并通过手术从历史记录中删除A
提交。 但是,这将需要更多的工作,更复杂的操作,并且还可能在您将master
推到远程设备时打开坏事发生的可能性。
我已经使用孤立分支解决了此问题。 我使用了以下命令:
在本地存储库(主分支)中,创建一个孤立分支
git checkout --orphan孤儿名称
删除所有文件
git rm -rf。
新增变更
git添加
提交更改
git commit -a -m“初始提交”
推动改变
git push origin orphan_name
再次检出master分支
git checkout主
用“ orphan_name”覆盖“ master”:
git reset --hard孤儿名称
强制推送到您的远程存储库:
git push -f原始主机
删除孤立的分支
git push-删除原始的orphan_name
我知道在已发布的分支机构/公共回购中这样做是有风险的。 但是用孤立分支提交重新排列根提交很有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.