git撤销修改-git基础(八)

在任何一个阶段,你都有可能想要撤消某些操作,如对已经修改的文件,想复原回去,或是刚 add 进入暂存区的文件,想撤销 add 。或是刚提交的版本想撤回重新提交。
但是有些撤消操作是不可逆的。

一、撤销并重新提交(commit)

命令 git commit –amend -m
该命令撤回的是提交(commit)操作。
假如我们新建了一个 hello.txt 文件,执行 git add 命令将其加入暂存区,再执行 git commit将其提交。然后我们后悔了,可能发现代码还是有问题,想修改后重新提交。
此时就需要使用撤销提交命令了。
实例:此时我们新建 hello.txt 并将其提交至仓库。
touch hello.txt 是linux新建文件的命令

$ touch hello.txt

$ git status
On branch master
Untracked files:
  (use "git add ..." to include in what will be committed)
        hello.txt

nothing added to commit but untracked files present (use "git add" to track)

$ git add hello.txt


$ git commit -m 新建hello文件
[master d997d8c] 新建hello文件
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hello.txt


$ git status
On branch master
nothing to commit, working tree clean

git log 命令,用于查看提交历史。

$ git log
commit d997d8c13b1e264210c052b08f39d7f28e55e98a (HEAD -> master)
Author: 
Date:   Mon Mar 16 22:50:50 2020 +0800

    新建hello文件

commit 02bad820d0cc5ea11783d82ce4a17cc55e9352e2
Author: 
Date:   Mon Mar 16 16:38:24 2020 +0800

    删除hello.txt文件

commit 84e27d498b4def4c92fc86c45d1613b1bbf57355
Author: 
Date:   Mon Mar 16 16:20:44 2020 +0800

    第二次提交跳过暂存区

commit 337070ec4a343031e38ec33a776e235ea2d9545e
Author: 
Date:   Sun Mar 15 23:13:01 2020 +0800

    初次提交

可以看到,此时有四个提交,即四个版本,最新版本是“新建hello文件”。
此时,我们执行撤销并重新提交命令,并查看文件状态。

$ git commit --amend -m 新建hello.txt文件
[master b162b1a] 新建hello.txt文件
 Date: Mon Mar 16 22:50:50 2020 +0800
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hello.txt


$ git status
On branch master
nothing to commit, working tree clean


$ git log
commit b162b1a04a6cc0df2205ed708ac9bf43220556b4 (HEAD -> master)
Author: 
Date:   Mon Mar 16 22:50:50 2020 +0800

    新建hello.txt文件

commit 02bad820d0cc5ea11783d82ce4a17cc55e9352e2
Author: 
Date:   Mon Mar 16 16:38:24 2020 +0800

    删除hello.txt文件

commit 84e27d498b4def4c92fc86c45d1613b1bbf57355
Author: 
Date:   Mon Mar 16 16:20:44 2020 +0800

    第二次提交跳过暂存区

commit 337070ec4a343031e38ec33a776e235ea2d9545e
Author: 
Date:   Sun Mar 15 23:13:01 2020 +0800

    初次提交

现在还是只有四个提交,四个版本,而最新版本由“新建hello文件”变成了  “新建hello.txt文件”。
需要注意的是:该命令只是重新将 暂存区的文件 提交至了版本仓库。所以执行这个命令之前一定要将已修改的文件,全部加入暂存区,以保证修改都提交入库。

二、取消暂存的文件

命令 git reset head  
该命令是 git add 的反向操作命令,撤销的是暂存操作。之前文章介绍的命令也可以用,但这个是正宗的。后面文章会详述。
他将撤销在暂存区指定的文件,让修改保留在工作区。
例如,你已经修改了一个文件,并执行了 git add  暂存了它。如何取消暂存呢?
此时我们修改工作区的 hello.txt,增加内容 hello,并保存。之后 add 进入暂存区,并撤销暂存:

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged ..." to unstage)
        modified:   hello.txt


$ git reset head hello.txt
Unstaged changes after reset:
M       hello.txt


$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   hello.txt

no changes added to commit (use "git add" and/or "git commit -a")

经过操作,hello.txt 文件的状态由 修改待提交,变为 修改待暂存。即从 暂存区撤销了,只保留到了 工作区。

三、撤消对文件的修改
命令 git checkout —
该命令撤销的是工作区的文件修改。用暂存区中filename文件来覆盖工作区中的filename文件。
比如我们对文件修改了一半,不想修改了,想恢复的没改之前的内容。
此时 hello.txt 是已修改未暂存状态,即我们在工作区修改了它,没有 add ,也未提交。我们想反悔,不想修改他了。

$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   hello.txt

no changes added to commit (use "git add" and/or "git commit -a")


$ git diff
diff --git a/hello.txt b/hello.txt
index e69de29..b6fc4c6 100644
--- a/hello.txt
+++ b/hello.txt
@@ -0,0 +1 @@
+hello
\ No newline at end of file


$ git checkout -- hello.txt

此时,已经用暂存区的文件覆盖了本地的修改。

总结:
1.命令 git commit –amend -m ,该命令撤回的是提交(commit)操作。
2. 命令 git reset head ,该命令是 git add 的反向操作命令,撤销的是暂存操作。
3. 命令 git checkout — 该命令撤销的是工作区的文件修改。用暂存区中filename文件来覆盖工作区中的filename文件。意思是如果工作区修改了文件,并add进暂存区了,该命令则失效!
需要注意文件在各个区域的变化。
git撤销修改-git基础(八)

如若转载,请注明出处:https://www.javaidea.cn/article/8055.html

(0)
上一篇 2022年2月7日 上午10:03
下一篇 2022年2月7日 上午10:03

相关推荐

发表评论

您的电子邮箱地址不会被公开。