跳到主要内容

Git撤销commit但是未git push的情况?

参考答案:

如果你想要撤销一个还未推送到远程仓库(origin)的commit,你可以使用git revert或者git reset。这两种方法在处理撤销commit时有所不同,取决于你想要达到的效果。

使用git revert

git revert是创建一个新的commit来撤销之前的某个commit的更改。这是非破坏性的,意味着你的历史记录中仍然会保留原始的commit

  1. 找出你想要撤销的commit的哈希值(commit hash)。你可以使用git log命令来查看提交历史。
git log
  1. 使用git revert命令撤销特定的commit。将<commit-hash>替换为你要撤销的commit的哈希值。
git revert <commit-hash>
  1. 提交更改。
git commit -m "Revert the changes made in <commit-hash>"

使用git reset

git reset是更改HEAD指针的位置,可以选择性地丢弃工作目录和暂存区的更改。这是一个更强大的工具,但需要小心使用,因为它会改变你的提交历史。

  1. 找出你想要撤销的commit的哈希值。
git log
  1. 使用git reset命令撤销特定的commit。将<commit-hash>替换为你要撤销的commit的哈希值。

    • 如果你想要保留这些更改在暂存区和工作目录中,可以使用--soft选项。
    	bash`git reset --soft <commit-hash>`
    
    • 如果你想要丢弃暂存区的更改但保留工作目录中的更改,可以使用--mixed选项(这是默认选项)。
    	bash`git reset --mixed <commit-hash>`
    
    • 如果你想要丢弃工作目录中的更改,可以使用--hard选项。请小心使用,因为这将会丢弃所有未提交的更改。
    	bash`git reset --hard <commit-hash>`
    

请注意,使用git reset特别是--hard选项会丢失未提交的更改,所以在使用之前请确保你理解它的影响。

在撤销commit之后,如果你想要将这些更改推送到远程仓库,你可以使用git push命令。

git push origin <branch-name>

<branch-name>替换为你正在使用的分支的名称。如果你在使用git reset时改变了提交历史,你可能需要使用--force选项来强制推送更改到远程仓库。

git push origin <branch-name> --force

请小心使用--force选项,因为它会覆盖远程仓库上的历史记录。