git撤销本地commit和远程push后的commit

撤销一个“已公开”的改变

场景: 你已经执行了 git push, 把你的修改发送到了 GitHub,现在你意识到这些 commit 的其中一个是有问题的,你需要撤销那一个 commit.

方法: git revert <SHA>

原理: git revert 会产生一个新的 commit,它和指定 SHA 对应的 commit 是相反的(或者说是反转的)。如果原先的 commit 是“物质”,新的 commit 就是“反物质” — 任何从原先的 commit 里删除的内容会在新的 commit 里被加回去,任何在原先的 commit 里加入的内容会在新的 commit 里被删除。

这是 Git 最安全、最基本的撤销场景,因为它并不会改变历史 — 所以你现在可以 git push 新的“反转” commit 来抵消你错误提交的 commit。

修正最后一个 commit 消息

场景: 你在最后一条 commit 消息里有个笔误,已经执行了 git commit -m "Fxies bug #42",但在 git push 之前你意识到消息应该是 “Fixes bug #42″。

方法: git commit --amend 或 git commit --amend -m "Fixes bug #42"

原理: git commit --amend 会用一个新的 commit 更新并替换最近的 commit ,这个新的 commit 会把任何修改内容和上一个 commit 的内容结合起来。如果当前没有提出任何修改,这个操作就只会把上次的 commit 消息重写一遍。

撤销“本地的”修改

场景: 一只猫从键盘上走过,无意中保存了修改,然后破坏了编辑器。不过,你还没有 commit 这些修改。你想要恢复被修改文件里的所有内容 — 就像上次 commit 的时候一模一样。

方法: git checkout -- <bad filename>

原理: git checkout 会把工作目录里的文件修改到 Git 之前记录的某个状态。你可以提供一个你想返回的分支名或特定 SHA ,或者在缺省情况下,Git 会认为你希望 checkout 的是 HEAD,当前 checkout 分支的最后一次 commit。

记住:你用这种方法“撤销”的任何修改真的会完全消失。因为它们从来没有被提交过,所以之后 Git 也无法帮助我们恢复它们。你要确保自己了解你在这个操作里扔掉的东西是什么!(也许可以先利用 git diff 确认一下)



重置“本地的”修改

场景: 你在本地提交了一些东西(还没有 push),但是所有这些东西都很糟糕,你希望撤销前面的三次提交 — 就像它们从来没有发生过一样。

方法: git reset <last good SHA> 或 git reset --hard <last good SHA>

原理: git reset 会把你的代码库历史返回到指定的 SHA 状态。 这样就像是这些提交从来没有发生过。缺省情况下, git reset 会保留工作目录。这样,提交是没有了,但是修改内容还在磁盘上。这是一种安全的选择,但通常我们会希望一步就“撤销”提交以及修改内容 — 这就是 --hard 选项的功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用Git进行版本控制时,我们可以使用`git commit`命令将修改的文件提交到本地仓库。然而,有时候我们会不小心提交了错误的内容或者需要对之前的提交进行修改。当我们还没有将这些提交推送到远程仓库时,我们可以使用以下方法来撤销提交。 一种常用的方法是使用`git reset`命令。通过`git reset`命令,我们可以将HEAD移动到想要撤销到的提交上。例如,如果我们想要撤销最新的提交,可以使用`git reset HEAD~1`命令。这样,最新的提交将被移除,并且修改的文件将回到暂存区,我们可以对其进行修改或重新提交。 另一种方法是使用`git revert`命令。通过`git revert`命令,我们可以创建一个新的提交来撤销之前的提交。例如,如果我们想要撤销最新的提交,可以使用`git revert HEAD`命令。这样,Git会创建一个新的提交,将之前的提交的更改反转,并将其应用到当前分支上。 无论是使用`git reset`还是`git revert`,请注意,这些操作都会更改Git历史记录。如果我们之前的提交已经被推送到远程仓库,那么需要小心地使用这些命令,以免影响其他人的工作。 总结起来,当我们需要撤销尚未推送的提交时,可以使用`git reset`或`git revert`命令来实现。通过这些命令,我们可以撤销提交并重新修改或创建新的提交。但是请谨慎操作,确保不会对 Git 的历史记录造成不必要的麻烦。 ### 回答2: 当我们使用Git进行版本控制时,有时候会意外地提交了一次错误的commit,但是还没有push远程仓库。这时候我们可以使用以下方法来撤销该次commit。 首先,可以使用以下命令查看最近几次的commit记录: ``` git log ``` 然后找到我们想要撤销commit的哈希值(commit hash)。接下来,可以使用以下命令来撤销该次commit,但是保留该次commit所做的更改: ``` git revert <commit hash> ``` 该命令会创建一个新的commit,将之前的commit中的更改撤销掉。 如果我们想要完全删除该次commit以及相关的更改,可以使用以下命令: ``` git reset <commit hash> ``` 该命令会将HEAD指针和当前分支指针都指向指定的commit,并且会丢弃掉指定commit之后的所有更改。 但是需要注意的是,以上的操作只能在本地仓库进行,如果该次commit已经push到了远程仓库,那么需要再进行一次push来同步到远程仓库上。 总结来说,如果要撤销一次未pushcommit,可以使用`git revert`命令来创建一个新的commit撤销该次commit的更改,或者使用`git reset`来完全删除该次commit以及相关的更改。 ### 回答3: 在Git中,如果我们在本地仓库中提交了一个commit,但是还没有将这个commit推送到远程仓库,我们可以使用`git reset`命令来撤销这个commit。 首先,我们可以使用`git log`命令查看提交记录,找到需要撤销commit的哈希值。 然后,我们可以使用`git reset`命令来撤销commit。有两种方式可以选择: 1. 使用`git reset --hard`命令来撤销commit并丢弃所有的修改,这将会将当前分支指向我们指定的commit并丢弃其之后的所有提交。 2. 使用`git reset --soft`命令来撤销commit但保留所有的修改,这将会将当前分支指向我们指定的commit并保留其之后的修改作为未提交的修改。 示例: 假设我们需要撤销commit的哈希值是abcdefg。 1. 使用`git reset --hard abcdefg`命令来撤销这个commit并丢弃所有的修改。 2. 使用`git reset --soft abcdefg`命令来撤销这个commit但保留所有的修改。 注意: 1. 使用`git reset`命令会直接修改本地分支,需要谨慎操作。 2. 如果已经推送过的commit需要撤销,推荐使用`git revert`命令来创建一个新的提交来撤销原来的commit。 总结: 通过使用`git reset`命令来撤销commit,我们可以保持本地仓库的修改状态和历史记录的完整性,而不会将错误或不需要的commit推送到远程仓库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值