从Git中删除推送的提交

时间:2014-01-28 12:12:58

标签: git

我的分支机构有以下历史记录。

  • “commit 3”(origin / master)
  • “commit 2”
  • “commit 1”(后面的主人2)
  • ...之前的提交

我想从历史记录中删除提交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.

4 个答案:

答案 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