我正在学习如何使用GIT和Bitbucket。 Bitbucket Admin(不是我)创建了一个远程存储库。
在该存储库中,我已将更改'A'提交给Master分支(这是存储库中的root / parent / first提交)。
现在,我已向Master分支提交了另一个更改“ B”。 如何在远程和本地存储库中重新排列提交并清除所有以前的首次提交历史记录?
在Bitbucket中,它应如下所示:
之前:在Master分支中
B“新提交”
“初始提交”
之后:在Master分支
“初始提交”
B“新提交”
提交'B'应该是第一次/初始提交,但是我不小心将更改推到了错误的方向。
是否可以使用git命令更正此错误?
答案 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-删除原始的孤儿名称
我知道在已发布的分支机构/公共仓库中执行此操作存在风险。但是用孤立分支提交重新排列根提交很有帮助。