git reset HEAD 用法

git reset HEAD 用法
【git技巧】
参考博客:https://blog.csdn.net/crjmail/article/details/100011063

git add 时,误添加不想提交的文件,如何解决?

  1. 误add所有文件
    git reset HEAD
    将所有此次修改的 file 退回到工作区

  2. 误add单个文件,只撤销部分文件
    git reset HEAD file
    将此次修改的这个 file 退回到工作区

以上操作使得被操作的文件图标从绿色变红色。

【注意】
git add 是将文件从工作区–>暂存区
git commit 是将文件从暂存区–>git本地仓库

如果 git add 一个 file 之后,又操作了该文件但未 git add ,且两次操作的地方有冲突
再 git reset HEAD file 时,文本内容将是后面的操作,而不是前面的回退

eg:
(1) 先修改 1.c 的 main 为 mai1n
$ git diff
— a/1.c
+++ b/1.c
@@ -1,4 +1,4 @@
-main
+mai1n

(2) 放到暂存区
$ git add .

(3) 再次修改 1.c 的 main 为 mai2n
$ git diff
— a/1.c
+++ b/1.c
@@ -1,4 +1,4 @@
-mai1n
+mai2n

(4) 查看 git 状态
$ git status
Changes to be committed:
modified: 1.c
Changes not staged for commit:
modified: 1.c

(5) 回退暂存区
$ git reset HEAD 1.c
Unstaged changes after reset:
M 1.c

(6) 查看状态
$ git status
Changes not staged for commit:
modified: 1.c

$ git diff
diff --git a/1.c b/1.c
— a/1.c
+++ b/1.c
@@ -1,4 +1,4 @@
-main
+mai2n

如果 git add 一个 file 之后,又操作了该文件但未 git add ,且两次操作的地方不冲突
再 git reset HEAD file 时,文本内容将是后面的操作,而不是前面的回退

(1) 修改 1.c
$ git diff
diff --git a/1.c b/1.c
index 0bd96f3…f9e2dc8 100644
— a/1.c
+++ b/1.c
@@ -1,4 +1,4 @@
hello world
-main
+main123
study

(2) 放到暂存区
$ git add .

(3) 再次修改 1.c ,在最后一行添加一行 “love”, 但是不 git add
$ git status
On branch master
Changes to be committed:
modified: 1.c
Changes not staged for commit:
modified: 1.c

$ git diff
diff --git a/1.c b/1.c
index f9e2dc8…a521094 100644
— a/1.c
+++ b/1.c
@@ -1,4 +1,4 @@
hello world
main123
study
+love

(4) 回退暂存区
$ git reset HEAD 1.c
Unstaged changes after reset:
M 1.c

$ git diff
diff --git a/1.c b/1.c
index 0bd96f3…a521094 100644
— a/1.c
+++ b/1.c
@@ -1,4 +1,4 @@
hello world
-main
+main123
study

+love

这应该是 git reset HEAD file 的一份风险点

【it rm 与 git reset的区别】
git rm:用于从工作区和索引中删除文件
git reset:用于将当前HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)。

git rm -f file_path
删除暂存区和分支上的文件,同时工作区也不需要

git rm --cached file_path
删除暂存区或分支上的文件, 但工作区需要使用, 只是不希望被版本控制

git reset HEAD 回退暂存区里的文件

上一篇:git各个场景下的代码撤销和回滚操作


下一篇:解决form表单reset()报错,$(...)[0].reset is not a function...