`

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

    博客分类:
  • git
 
阅读更多
撤销一个“已公开”的改变

场景: 你已经执行了 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 选项的功能。

分享到:
评论

相关推荐

    git如何撤销commit的方法(未push)

    主要介绍了git如何撤销commit的方法(未push),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Git撤销已经推送(push)至远端仓库的提交(commit)信息操作

    主要介绍了Git撤销已经推送(push)至远端仓库的提交(commit)信息操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    leetcode下载-sooof_workspace:工作

    leetcode下载 sooof workspace work 下载: git clone ...测试github是否联通: ssh ...将自己的修改push到github上: ...commit ...commit" ...git撤销已经push到远端的commit: git log -2 git reset --hard d3b87ba

    25个开发┃如何在Git里撤销(几乎)任何操作

    任何版本控制系统的一个最有的用特性就是...场景:你已经执行了gitpush,把你的修改发送到了GitHub,现在你意识到这些commit的其中一个是有问题的,你需要撤销那一个commit.原理:gitrevert会产生一个新的commit,它和指定

    git实用但不常用的命令(持续更新)

    这篇文章用来记录工作中会需要但又不像push,pull这么...撤销commit(实用) git reset –soft/mixed/hard(代表三种模式,取其一就行) HEAD~1 如果进行了两次commit都想撤回,可以使用HEAD~2 soft:不删除工作空间代码,撤

    图解git原理与日常实用指南

    从之前只会基本的add、commit、pull、push操作到使用stash、merge、reset方便得不亦乐乎,都得益于对git原理的深入理解,逼话少说,咋们直接进入正题。前方长篇预警...所谓版本控制,就是在文件修改的历程中保留修改...

    基于Vue+TypeScript开发的音乐视频推荐平台源码(毕设项目).zip

    3. 提交你的修改: `git commit -am 'feat(function): add xxxxx'` 4. 推送您的分支: `git push origin feat/xxxx` 5. 提交`pull request` ## Git 贡献提交规范 - `feat` 增加新功能 - `fix` 修复问题/BUG - `...

    draw:App Web App,提供设计任何东西的工具,发挥创意!

    进行更改并确认: git commit -m '&lt;mensagem&gt;' 发送到原始分支: git push origin &lt;nome&gt; / &lt;local&gt; 创建拉取请求。 另外,请查阅GitHub文档, 。 :memo: 执照该项目已获得许可。 有关更多详细信息,请参见文件。

    branch-pruner-workflow:通过手动和自动截断分支的历史记录来减小repo的大小。 较新的提交和文件版本被保留

    树枝修剪器| GitHub动作流程 注意:它是一种强大的工具,您自行承担使用风险。... 或者,当您遇到诸如push和pull类的Git命令普遍缓慢的问题时。 然后是时候使用。 它将再次加快您的速度 :winking_face: 。 | 学分

    LearningNotes

    明显撤回commit操作,您写的代码仍然保留,HEAD ^的意思是上一个版本,也可以写成'HEAD〜1' 如果你进行了2次提交,想都撤回,可以使用HEAD〜2。 《深度学习之PyTorch物体检测实战》代码 2020/12/09 前向传播test01...

Global site tag (gtag.js) - Google Analytics