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

时间:2018-12-26 10:24:54

标签: git git-commit git-rebase

我正在学习如何使用GIT和Bitbucket。 Bitbucket Admin(不是我)创建了一个远程存储库。

在该存储库中,我已将更改'A'提交给Master分支(这是存储库中的root / parent / first提交)。

现在,我已向Master分支提交了另一个更改“ B”。 如何在远程和本地存储库中重新排列提交并清除所有以前的首次提交历史记录?

在Bitbucket中,它应如下所示:

之前:在Master分支中

B“新提交”

“初始提交”


之后:在Master分支

“初始提交”

B“新提交”

提交'B'应该是第一次/初始提交,但是我不小心将更改推到了错误的方向。

是否可以使用git命令更正此错误?

2 个答案:

答案 0 :(得分:0)

这里最好的一般答案可能是您应该执行git revert以在功能上撤消第一次提交A

git revert <SHA-1 of A commit>

要找出A的提交哈希,只需键入git log并搜索第一个提交的哈希。看起来像3kd983ngl74ok

这将向您的master分支添加一个 new 提交,该提交从功能上撤消了所添加的A提交。因此,您的master分支现在看起来像:

master: A -- B -- R

其中R是新的还原提交。但是,master分支的行为就像从未发生过A

如果您已经在存储库中发布了分支,这是最安全的选择。

这里的另一种可能性是进行交互式变基,并通过手术从历史记录中删除A提交。但是,这将需要更多的工作,更加复杂,并且还可能在您将master强制推到遥控器上时发生坏事。

答案 1 :(得分:0)

我已使用孤立分支解决了此问题。我使用了以下命令:

在您的本地存储库(主分支)中,创建一个孤立分支

git checkout --orphan orphan_name

删除所有文件

git rm -rf。

添加新更改

git添加。

提交更改

git commit -a -m“初始提交”

推送更改

git push origin orphan_name

再次检出master分支

git checkout master

用“ orphan_name”覆盖“ master”:

git reset --hard orphan_name

强制推送到您的远程存储库:

git push -f origin master

删除孤儿分支

git push-删除原始的孤儿名称

我知道在已发布的分支机构/公共仓库中执行此操作存在风险。但是用孤立分支提交重新排列根提交很有帮助。