原文地址:http://blog.csdn.net/hudashi/article/details/7664460
原文如下:
git revert 是撤销某次操作,此次操作之前的commit都会被保留
git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区
具体一个例子,假设有三个commit, git st:
commit3: add test3.c
commit2: add test2.c
commit1: add test1.c
当执行git revert HEAD~1时, commit2被撤销了
git log可以看到:
commit1:add test1.c
commit3:add test3.c
git status 没有任何变化
如果换做执行git reset --soft(默认) HEAD~1后,运行git log
commit2: add test2.c
commit1: add test1.c
运行git status, 则test3.c处于暂存区,准备提交。
如果换做执行git reset --hard HEAD~1后,
显示:HEAD is now at commit2,运行git log
commit2: add test2.c
commit1: add test1.c
运行git st, 没有任何变化
另外:
git revert <commit log string>是撤消该commit,作为一个新的commit。
本人示例如下:
1,初始化git仓库
mkdir test cd test git init touch test1.c touch test2.c touch test3.c git add test1.c git commit -m “第一次提交” git add test2.c git commit -m “第二次提交” git add test3.c git commit -m “第三次提交”
git log查看结果:
commit 4f6aa621149f98edf8887fa2219b63c84a95f317 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第三次提交” commit 4bf0d2237bddd50e3674d264eebcf696af61790a Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第二次提交” commit 61f08c6d73f7f5822a39fba5b177d5394c77f26d Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第一次提交”
2,执行git revert HEAD~1
查看git log
结果:
commit 8119ed3e329a2cd939291949cd265db6fc658b76 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:48:31 2016 +0800 Revert "“第二次提交”" This reverts commit 4bf0d2237bddd50e3674d264eebcf696af61790a. commit 4f6aa621149f98edf8887fa2219b63c84a95f317 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第三次提交” commit 4bf0d2237bddd50e3674d264eebcf696af61790a Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第二次提交” commit 61f08c6d73f7f5822a39fba5b177d5394c77f26d Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:42:26 2016 +0800 “第一次提交”
git status查看:
On branch master nothing to commit, working directory clean
ls查看:
test1.c test3.c
发现 test2.c文件找不到了,但是可以通过再次运行git revert HEAD~1命令找回来,找回来的文件放在了暂存区里了。
3,重新建立删除原有test仓库,并重新建立和初始化
执行git reset HEAD~1
git log查看:
commit 09e51cd049ee37f1fece19e042390196367328f2 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第二次提交” commit 988e3312b3c6e5e3a20d3dc95cfa9b61e558b5fc Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第一次提交”
git status查看结果:
On branch master Untracked files: (use "git add <file>..." to include in what will be committed) test3.c nothing added to commit but untracked files present (use "git add" to track)
test3.c文件在当前工作目录,并没有进入暂存区,所以是红色字体显示(未被追踪的文件)
4,重新建立删除原有test仓库,并重新建立和初始化
执行git reset --soft HEAD~1
git log查看:
commit 09e51cd049ee37f1fece19e042390196367328f2 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第二次提交” commit 988e3312b3c6e5e3a20d3dc95cfa9b61e558b5fc Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第一次提交”
git status查看结果:
On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: test3.c
test3.c文件放在了暂存区里了。
无论是git reset HEAD~1 还是 git reset --soft HEAD~1,都能撤销指定的提交,只不过,前者将撤销的提交放在了当前目录,后者将撤销的提交放在了暂存区。而且使用ls查看,三个文件也都在当前工作目录里呢。
注意:如果执行git reset --soft HEAD~2则第二次提交和第三次提交的文件都撤销了,放入暂存区里了。
5,重新建立删除原有test仓库,并重新建立和初始化
执行git reset --hard HEAD~1结果:
HEAD is now at 09e51cd “第二次提交”
git log查看:
commit 09e51cd049ee37f1fece19e042390196367328f2 Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第二次提交” commit 988e3312b3c6e5e3a20d3dc95cfa9b61e558b5fc Author: zhanghaiwei <forest@163.com> Date: Tue Feb 16 11:56:29 2016 +0800 “第一次提交”
git status查看:
On branch master nothing to commit, working directory clean
ls查看:
test1.c test2.c
发现test3 文件丢失。
相关推荐
通过上述介绍,我们可以清晰地看出`git revert`和`git reset`的区别在于: - `git revert`是通过创建一个新的提交来撤销更改,而`git reset`则是通过移动HEAD指针来撤销更改。 - `git revert`不会影响原有的提交...
在标签“git”相关的其他知识点中,包括但不限于分支管理(如`git branch`, `git checkout`, `git merge`, `git rebase`)、提交历史查看(`git log`)、回退版本(`git reset`, `git revert`)、标签管理(`git tag...
### Git命令大全详解 ...- **示例**: `git revert 123abc`会创建一个新的提交来撤销`123abc`这个提交所做的更改。 以上是Git命令大全的部分内容,通过这些命令,你可以有效地管理和协作于Git仓库中的代码。无论...
6. **重置与回退**:如`git reset`和`git revert`用于撤销变更,理解它们的区别很重要。 7. **解决冲突**:当多人同时修改同一文件时可能会出现冲突,手册会介绍如何识别和解决这些冲突。 8. **标签管理**:`git ...
理解`git revert`和`git reset`的区别,掌握它们在不同场景下的使用,以及如何处理冲突和部分回滚,将有助于在面对复杂情况时保持代码库的整洁和健康。在实际操作中,务必谨慎,并确保团队成员了解所做的任何回滚...
- **示例**:`git reset --hard HEAD^` (回退到上一个版本) 3. **git revert**: - **作用**:撤销某个提交。 - **示例**:`git revert <commitHash>` #### 七、其他常用命令 1. **git stash**: - **作用**...
在实际操作中,掌握版本回退(`git reset`和`git revert`)、解决冲突、创建标签(Tag)以及工作流模型(例如Git Flow或GitHub Flow)也很关键。这些内容可能在压缩包中的某个文件中详细讲解。 Git的图形界面工具,...
3. 使用`git add`和`git commit`提交已解决的冲突。 #### 取消修改 撤销对文件的修改或恢复到某个版本的状态。 ##### 查看工作目录和暂存区的状态 检查当前工作目录和暂存区的状态。 **命令示例:** ``` git ...
- **示例**: 如果提交 ID 为 `123456`,则命令为 `git reset --hard 123456`。 **7.2 撤销指定提交** - **命令**: `git revert <commit-id>` - **用途**: 创建一个新的提交来撤销指定提交的更改。 - **示例**: ...
本篇将根据提供的内容,深入解析Git的基础与进阶命令,帮助读者更好地理解和运用这些命令。 #### 二、创建与初始化 - **`git clone`**:用于克隆一个已存在的远程仓库至本地。 - **示例**: ``` $ git clone ...
6. **版本回溯**:掌握`git reset`和`git revert`等命令,用于撤销错误的提交或恢复旧版本。 7. **标签管理**:使用`git tag`命令为特定的提交打标签,便于标识重要的里程碑。 8. **工作流**:学习不同的开发工作...
对于版本控制,Git提供了强大的`git log`来查看提交历史,`git diff`来比较不同版本的差异,`git revert`或`git reset`可以撤销或回退到某个提交。如果误删文件,`git checkout -- [file]`可以恢复。 在团队协作中...
- **撤销合并**:`git reset`和`git revert`可以撤销合并。 - **快进合并**:当目标分支是当前分支的子集时,合并无需合并冲突。 - **修复错误**:`git amend`用于修正最近的提交,`git rebase`重写历史。 - **...
6. 撤销操作:Git的`git revert`和`git reset`命令可以帮助用户撤销不想要的更改,无论是单个文件还是整个提交。 7. 子模块:对于大型项目,Git支持子模块功能,允许在一个项目中引用其他Git仓库,方便管理依赖。 ...
4. **版本回溯**:通过`git log`查看提交历史,`git reset`和`git revert`可以撤销更改,`git diff`显示文件差异。 5. **远程仓库操作**:讲解如何在GitHub或其他托管平台创建远程仓库,使用`git remote`添加、查看...
6. **回溯与撤销**:`git reset`和`git revert`可以用来撤销提交或回退到某个历史状态,但两者的机制不同,使用时需谨慎。 7. **标签**:`git tag`命令用于创建、列出、删除或推送标签,常用于标记重要的提交,如...
4. 版本回溯:利用`git log`查看提交历史,`git reset`和`git revert`来恢复或撤销更改。 5. 撤销操作:学习如何在不小心破坏工作副本时使用`git checkout`,`git reset --hard`等命令进行恢复。 6. Git工作流:...