Git撤销提交和修改相关操作

作者:佚名 上传时间:2019-05-28 版权申诉

团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢?

一.增补提交

git commit –C HEAD –a --amend

-C表示复用指定提交的提交留言,这个例子中是HEAD,实际上可以指定其他有效的提交名称。

如果参数是小写的-c,就会打开预先设置好的编辑器,以便在已有的提交留言基础上编辑修改。

增补提交只能针对最后一个提交,如果想更正好几个提交之前的某个错误,则须使用git revert这个命令。

二.反转提交

反转已经提交的改动,使用git revert命令,此命令通过在版本库中创建一个“反向的”新提交来抵消原来提交的改动。

通常Git会立即提交反转结果,但是也可以通过参数-n告诉Git先不要提交,这用于反转多个提交非常有用,运行多个git revert –n命令,Git会暂存所有的变更,然后做一次性提交。

做反转操作的时候必须提供提交名称,反转总是按照从新到旧点的倒序来操作的,即最后的提交最先反转,这样可以避免一些不必要的冲突。

三.复位

命令git reset可以在复位版本库后,暂存工作目录树中因复位产生的与版本库的差异,以便提交。

git reset --soft 该命令撤消上一个commit,但保留add的文件,使得Git暂存所有的因复位带来的差异,但不提交它。

之后,用户可以修改这些内容再提交,或者干脆扔掉这些内容。

选项--hard要小心使用,该选项会从版本库和工作目录树中同时删除提交,--hard就好像版本库中的删除键,并且不可恢复。

git reset是以提交名称作为参数的,默认值是HEAD,可以用^和~作为提交名称的修饰符来指定某个版本。

HEAD^是指把版本库复位到当前HEAD之前的那个节点上,把HEAD这个版本的修改扔到工作目录树中,

540ecb7~3是指要复位到540ecb7之前的三个节点上,即把该提交和之前的两个提交(共三个提交)扔到工作目录树中。

git reset --hard HEAD^ 强制复位前一个提交。

git reset HEAD可以用来清除已经add到缓存区但是不想进一步提交的内容。

另一种方式是用git rm --cached,选项--cached表明是清除缓存区,然后不动工作目录树。

注意git checkout filename将会删除该文件中所有没有暂存和提交的改动,这个操作是不可逆的。

四.Git回复修改的场景

(1)如果不小心commit了一个不需要commit的文件,可以对其进行撤销

先使用git log 查看 commit日志

1
2
3
4
5
6
7
8
commit 422bc088a7d6c5429f1d0760d008d86c505f4abe
Author: test
Date: Tue Sep 4 18 : 19 : 23 2015 + 0800
注释 - 本次为错误提交
commit 8da0fd772c3acabd6e21e85287bdcfcfe8e74c85
Merge: 461ac36 0283074
Author: test
Date: Tue Sep 4 18 : 16 : 09 2015 + 0800


找到需要回退的那次commit的 哈希值,使用下面的命令进行回退:
git reset --hard commit_id

注意--hard可以把已经add的文件也删掉,谨慎使用。

(2)git如何恢复本地删除的文件(还没执行 git commit)

直接从本地把文件checkout出来就可以了,用不着从远程服务器上pull下来,因为,所有的历史版本你的本地都有的。

具体做法 git checkout file 同时恢复多个被删除的文件:

git ls-files -d | xargs -i git checkout {}

(3)从Git仓库中恢复已删除的分支或丢失的commit

在使用Git的过程中,有时可能会有一些误操作

比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支

结果造成本地(远程)的分支或某些commit丢失

这时,我们可以通过reflog来进行恢复,前提是丢失的分支或commit信息没有被git gc清除

一般情况下,gc对那些无用的object会保留很长时间后才清除的

reflog是git提供的一个内部工具,用于记录对git仓库进行的各种操作

可以使用git reflog show或git log -g命令来看到所有的操作日志

恢复的过程很简单:

1. 通过git log -g命令来找到我们需要恢复的信息对应的commitid,可以通过提交的时间和日期来辨别

2. 通过git branch recover_branch commitid 来建立一个新的分支

这样,我们就把丢失的东西给恢复到了recover_branch分支上了


本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/5148928.html,如需转载请自行联系原作者

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
Git
团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢? 一.增补提交 git commit –C H
Git本地文件
Git提供了撤销本地文件修改与提交的方法,通过使用git checkout和git reset命令可以实现这一功能。git checkout用于撤销对单个文件的修改,而git reset则可以撤销提交
Git 2.33.1
Git
2023-12-10 22:48
Git如何
在Git中,我们经常需要撤销已提交的修改。这可以通过以下命令来实现:1. Git撤销操作如果您想撤销最近的提交并将更改保留在本地,请使用以下命令:git reset HEAD~2. Git撤
最新版
Git
2023-04-06 00:46
Git中如何
本示例代码将介绍如何在Git中撤销已提交的修改。可以通过撤销一次提交或恢复到上一个提交来移除错误或不必要的更改。本示例代码还包括如何进行提交信息的更新。# 撤销最近一次提交git reset HE
Git 2.0+
Git
2023-03-27 14:17
Git如何已经
介绍如何使用Git撤销已经提交的修改,包括撤销修改和回退版本两种方法。git reset HEAD~ 、 git checkout .
Git v2.23.0
Git
2023-04-29 23:51
如何在git
本示例代码演示了如何使用git的撤销命令来撤销已提交的修改。在代码中,我们使用了git reset和git revert命令来处理不同类型的修改。# 撤销提交的修改git reset HEAD~1
Git 2.27.0
Git
2023-03-19 13:50
Git、回退版本命令
取消对文件的修改、还原到最近的版本、废弃本地做的修改。 git checkout file.txt# 如果是当前项目的所有修改过的文件git checkout .
Git、回退版本命令
取消对文件的修改、还原到最近的版本、废弃本地做的修改。 git checkout file.txt# 如果是当前项目的所有修改过的文件git checkout .
使用Git如何已经
介绍使用Git撤销已提交修改的方法# 恢复已提交修改git revert <commit># 重置当前分支到指定提交之前git reset <commit># 重置当
Git 2.32.0
Git
2023-03-20 23:36
使用Git本地并保留
有时候在提交代码前需要进行修改,本示例演示如何使用Git在不撤销工作目录修改的情况下撤销最新的本地提交。# 修改文件echo "新的修改" >> 文件.txt#
Git 2.30.0
Git
2023-11-13 20:24