`

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,特别是在未执行`git push`操作的情况下。这些方法包括使用`git reset`命令的不同参数,以及如何安全地回退到特定的commit版本。 首先,我们来看`git reset`命令的基本语法: ...

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

    Git撤销已经推送至远端仓库的提交操作是一个常见的需求,特别是在开发过程中,有时我们需要修复错误或者更新代码,但已经将不完美的提交推送到共享仓库。本文将详细解释如何完成这一过程,确保你的Git历史记录保持...

    Git常用命令和结构

    5. 当需要与他人共享更改时,使用`git push`将本地库的更新推送到远程库。 除了上述基本操作,Git还提供许多其他功能,例如: - **撤销更改**:可以使用`git reset`命令撤回对文件的更改,或者使用`git checkout -...

    linux的git压缩包

    4. **远程仓库操作**:`git remote`命令用于管理远程仓库,`git fetch`获取远程仓库的更新,`git pull`则会拉取并自动合并远程分支,`git push`将本地提交推送到远程仓库。 5. **解决冲突**:当多人同时修改同一...

    git 常用的一些命令

    使用 git push -u origin master 命令可以推送本地 master 分支到远程仓库,并关联远程仓库。第一次推送加上 -u 参数可以关联远程仓库。 8. Git 分支合并命令 使用 git merge dev 命令可以把 dev 分支合并到当前...

    完全学会GIT+GITHUB+GIT+SERVER的24堂课

    开发者常使用`git pull`和`git push`同步本地和远程仓库。`git pull`合并远程更改,`git push`将本地更改推送到远程。 以上是对Git、GitHub和Git Server基本知识的概述。通过24堂课的学习,你将能够熟练掌握这些...

    Git详解_Git详解

    - **远程仓库**:通过`git remote add`添加远程仓库,`git push`将本地更改推送到远程,`git pull`则用来获取并合并远程仓库的更新。 3. **Git分支**: 分支是Git的核心特性,允许并发开发。`git branch`用于创建...

    Git实战操作(Idea)

    - **git push origin 本地分支:远程分支**:将本地分支推送到远程分支。 #### 三、远程仓库操作 ##### 3.1 推送远程仓库 - **git clone 地址信息**:将远程仓库的代码克隆到本地。 - **git pull**:拉取远程数据...

    Git 管理工具和操作文档(msysgit for windows)

    "git_cmd.jpg"可能是一个截图,展示了如何在Git命令行中执行常见的Git操作,例如`git init`初始化一个新的Git仓库,`git add`将文件添加到暂存区,`git commit`保存提交,`git push`将本地更改推送到远程仓库,以及`...

    Git安装文件.zip

    `git add` 用于将文件添加到暂存区,`git commit` 用于保存工作区的更改到本地仓库,`git push` 用于将本地仓库的更改推送到远程仓库。 版本控制的核心在于分支管理。Git的分支允许开发者并行开发。`git branch` ...

    Git 原理详解及实用指南.zip

    - 推送:`git push origin &lt;branch&gt;` 将本地分支的更改推送到远程仓库。 3. **Git进阶操作** - 分支管理:`git branch` 列出所有分支,`git checkout -b &lt;new_branch&gt;` 创建并切换分支。 - 合并分支:`git merge...

    GIT常用命令整理

    - `git push`:将本地更改推送到远程仓库。 了解并熟练掌握这些Git命令,可以帮助开发者更高效地管理和协作项目。HTML文档和PNG脑图可以作为视觉辅助工具,进一步巩固理解和记忆。通过实践和应用,你将能够更加...

    git图文教程中文教程

    7. **远程操作**: `git remote`命令用于管理远程仓库,`git fetch`和`git pull`用于获取远程仓库的更新,`git push`则将本地更改推送到远程。 8. **标签管理**: Git的标签功能可以标记特定的提交,通常用于发布里程...

    git 教材 progit

    `git clone`用于克隆远程仓库,`git push`和`git pull`则用于同步本地和远程的代码。 5. **协作与冲突解决**:在多人协作的项目中,可能会遇到合并冲突。Git会提示你哪些文件有冲突,然后手动编辑这些文件以解决...

    小册-Git 原理详解及实用指南.zip

    对于协同开发,Git提供了`git clone`来克隆远程仓库,`git pull`和`git push`用于同步本地和远程仓库的数据。`git pull`不仅下载远程仓库的更新,还会尝试自动合并到当前分支;`git push`则将本地的提交推送到远程...

    git常用操作附示例-个人学习笔记

    Git 初始化包括创建本地仓库和远程仓库。使用以下命令: git init // 创建本地仓库 git remote add origin &lt;远程仓库URL&gt; // 添加远程仓库 三、 Git 分支操作 Git 分支操作包括创建、查看、切换和删除分支。使用...

    git常用命令.docx

    * `git push -f origin branchname`:推送本地分支到远程服务器 * `git pull origin branchname`:从远程服务器拉取最新代码 * `git push -f -u origin branchname`:推送本地分支到远程服务器并设置追踪 代码管理...

    git常见操作指令速记卡《git-cheatsheet》

    发布本地更改到远程仓库时,使用`git push &lt;remote&gt; &lt;branch&gt;`。要删除远程分支,用`git push &lt;remote&gt; --delete &lt;branch&gt;`。而发布标签则用`git push --tags`。如果需要将HEAD指针重置到之前的某个提交,可以使用`...

    git 常用命令和示例

    `git clone` 用于从远程仓库克隆一个副本到本地;`git pull` 合并远程仓库中的更改到当前分支。 - **应用场景:** 当您需要获取某个项目的源代码时,可以使用`git clone`命令;而`git pull`则是在您已经克隆了...

Global site tag (gtag.js) - Google Analytics