繁体   English   中英

Git重新排列根提交和第二个提交

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM