我的分支机构有以下历史记录。
我想从历史记录中删除提交2和3。因此,提交1是最新的。我是唯一使用此存储库的人。
我正在使用SourceTree,在终端中我输入了以下内容:
git rebase -i
然后我得到一个彩色屏幕,我无法输入命令。我该怎么办?
编辑:
推送错误
ssh: connect to host <myhost> port 22: Bad file number
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
答案 0 :(得分:2)
如果您想取消提交,但保留您在文件中所做的修改:
git reset --soft HEAD^2
如果您想同时取消提交并取消本地文件中的修改:
git reset --hard HEAD^2
Head^X
表示在当前分支上次提交之前的第X次提交。
答案 1 :(得分:1)
所有这些答案似乎都显示了如何删除commit2&amp;来自本地存储库的commit3,但不解决远程存储库。
首先,退出您所在的交互式rebase。这只会影响本地历史记录。您可能需要退出所在的文本编辑器或运行git rebase --abort
。我不确定你的确切状态。
一旦你回到正常的命令行,checkout master,因为它已经在所需的commit1。
git checkout master
然后强制origin / master更新为master。
git push -f
作为对其他读者的警告,永远不要与其他开发人员强制推送共享存储库!这适用于原始海报,因为他们是唯一使用其远程存储库的海报。
答案 2 :(得分:0)
你可以恢复这两个提交:2和3:
git revert "commit 3"
git revert "commit 2"
或git reset:
git reset --hard "commit 1"
答案 3 :(得分:0)
如果要在当前HEAD上提交具有不同提交的确切状态,撤消所有中间提交,则可以使用reset来创建索引的正确状态以进行提交。
# reset the index to the desired tree
git reset 56e05fced
# move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}
git commit -m "Revert to 56e05fced"
# Update working copy to reflect the new commit
git reset --hard