【git技巧】
参考博客:https://blog.csdn.net/crjmail/article/details/100011063
git add 时,误添加不想提交的文件,如何解决?
-
误add所有文件
git reset HEAD
将所有此次修改的 file 退回到工作区 -
误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 回退暂存区里的文件