Git & GitHub 杂记:直接操作文件的后悔药

导读:本篇文章讲解 Git & GitHub 杂记:直接操作文件的后悔药,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1,删除文件

情况一:只删除工作目录filename——rm <filename>

  • rm只删除工作目录filename,如果filename暂存过,则暂存区filename不会被删除
dang@DFLubuntu:~$ mkdir testproject
dang@DFLubuntu:~$ cd testproject
dang@DFLubuntu:~/testproject$ git init
已初始化空的 Git 仓库于 /home/dang/testproject/.git/
dang@DFLubuntu:~/testproject$ echo '1111' > a.txt
dang@DFLubuntu:~/testproject$ ls -l
总用量 4
-rw-rw-r-- 1 dang dang 5 1117 22:29 a.txt
dang@DFLubuntu:~/testproject$ rm a.txt
dang@DFLubuntu:~/testproject$ ls -l
总用量 0
dang@DFLubuntu:~/testproject$ echo '1111' > a.txt
dang@DFLubuntu:~/testproject$ ls -l
总用量 4
-rw-rw-r-- 1 dang dang 5 1117 22:29 a.txt
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ rm a.txt
dang@DFLubuntu:~/testproject$ ls -l
总用量 0
dang@DFLubuntu:~/testproject$ git status -s
AD a.txt

dang@DFLubuntu:~/testproject$

情况二:只删除暂存区filename——git rm --cached <filename>

  • 工作目录的filename已经暂存,rm –cached 就能将暂存区该filename直接删除
dang@DFLubuntu:~$ mkdir testproject
dang@DFLubuntu:~$ cd testproject
dang@DFLubuntu:~/testproject$ git init
已初始化空的 Git 仓库于 /home/dang/testproject/.git/
dang@DFLubuntu:~/testproject$ echo "11111" > a.txt
dang@DFLubuntu:~/testproject$ ls -l
总用量 4
-rw-rw-r-- 1 dang dang 6 1117 22:13 a.txt
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ git rm --cached a.txt
rm 'a.txt'
dang@DFLubuntu:~/testproject$ git status -s
?? a.txt
dang@DFLubuntu:~/testproject$

情况三:删除工作目录和暂存区filename——git rm -f <filename>

  • 工作目录的filename已经暂存,将强制同时删除工作目录和暂存区filename
  • 另一种方法是先rm <filename>git add <filename>
dang@DFLubuntu:~$ mkdir testproject
dang@DFLubuntu:~$ cd testproject
dang@DFLubuntu:~/testproject$ git init
已初始化空的 Git 仓库于 /home/dang/testproject/.git/
dang@DFLubuntu:~/testproject$ echo '1111' > a.txt
dang@DFLubuntu:~/testproject$ git status -s
?? a.txt
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ git rm -f a.txt
rm 'a.txt'
dang@DFLubuntu:~/testproject$ git status -s
dang@DFLubuntu:~/testproject$ 

变更包括增、删、改。

2,撤销工作目录文件变更

方法一:系统快捷键或 IDE 快捷键

  • 工作目录的filename尚未暂存

方法二:git restore <filename>

  • 工作目录的filename暂存后发生变更,restore 就能将工作目录该filename重新存储为变更前工作目录该filename
dang@DFLubuntu:~$ mkdir testproject
dang@DFLubuntu:~$ cd testproject
dang@DFLubuntu:~/testproject$ git init
已初始化空的 Git 仓库于 /home/dang/testproject/.git/
dang@DFLubuntu:~/testproject$ echo '1111' > a.txt
dang@DFLubuntu:~/testproject$ git status -s
?? a.txt
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ git diff
dang@DFLubuntu:~/testproject$ echo '2222' >> a.txt
dang@DFLubuntu:~/testproject$ git status -s
AM a.txt
dang@DFLubuntu:~/testproject$ git diff
diff --git a/a.txt b/a.txt
index 5f2f16b..4f142ee 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 1111
+2222
dang@DFLubuntu:~/testproject$ git restore a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ git diff
dang@DFLubuntu:~/testproject$ 

方法三:git checkout -- <filename>

  • 工作目录的filename暂存后发生变更,checkout – 就能将工作目录该filename检出为变更前工作目录该filename
dang@DFLubuntu:~$ mkdir testproject
dang@DFLubuntu:~$ cd testproject
dang@DFLubuntu:~/testproject$ git init
已初始化空的 Git 仓库于 /home/dang/testproject/.git/
dang@DFLubuntu:~/testproject$ echo '1111' > a.txt
dang@DFLubuntu:~/testproject$ git status -s
?? a.txt
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ git diff
dang@DFLubuntu:~/testproject$ echo '2222' >> a.txt
dang@DFLubuntu:~/testproject$ git status -s
AM a.txt
dang@DFLubuntu:~/testproject$ git diff
diff --git a/a.txt b/a.txt
index 5f2f16b..4f142ee 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 1111
+2222
dang@DFLubuntu:~/testproject$ git restore a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ git diff
dang@DFLubuntu:~/testproject$ 

3,撤销文件暂存

方法一:git rm --cached <filename>

  • 工作目录的filename发生变更且已经暂存,rm –cached 就能将暂存区该filename直接删除。其实就是通过删除来实现撤销。
dang@DFLubuntu:~$ mkdir testproject
dang@DFLubuntu:~$ cd testproject
dang@DFLubuntu:~/testproject$ git init
已初始化空的 Git 仓库于 /home/dang/testproject/.git/
dang@DFLubuntu:~/testproject$ echo "11111" > a.txt
dang@DFLubuntu:~/testproject$ ls -l
总用量 4
-rw-rw-r-- 1 dang dang 6 1117 22:13 a.txt
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ git rm --cached a.txt
rm 'a.txt'
dang@DFLubuntu:~/testproject$ git status -s
?? a.txt
dang@DFLubuntu:~/testproject$ 

方法二:git restore --staged <filename>

  • 自上次提交来,工作目录的filename发生变更且已经暂存,restore就能将暂存区该filename重新存储为上次提交后暂存前的老版本
dang@DFLubuntu:~$ mkdir testproject
dang@DFLubuntu:~$ cd testproject
dang@DFLubuntu:~/testproject$ git init
已初始化空的 Git 仓库于 /home/dang/testproject/.git/
dang@DFLubuntu:~/testproject$ echo '1111' > a.txt
dang@DFLubuntu:~/testproject$ git status -s
?? a.txt
dang@DFLubuntu:~/testproject$ git diff
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ git diff --staged
diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..5f2f16b
--- /dev/null
+++ b/a.txt
@@ -0,0 +1 @@
+1111
dang@DFLubuntu:~/testproject$ git commit -m '第一次提交a.txt' a.txt
[master (根提交) c588f67] 第一次提交a.txt
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
dang@DFLubuntu:~/testproject$ git status -s
dang@DFLubuntu:~/testproject$ git diff
dang@DFLubuntu:~/testproject$ git diff --staged
dang@DFLubuntu:~/testproject$ echo '2222' >> a.txt
dang@DFLubuntu:~/testproject$ git status -s
 M a.txt
dang@DFLubuntu:~/testproject$ git diff
diff --git a/a.txt b/a.txt
index 5f2f16b..4f142ee 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 1111
+2222
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
M  a.txt
dang@DFLubuntu:~/testproject$ git diff --staged
diff --git a/a.txt b/a.txt
index 5f2f16b..4f142ee 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 1111
+2222
dang@DFLubuntu:~/testproject$ git restore --staged a.txt
dang@DFLubuntu:~/testproject$ git status -s
 M a.txt
dang@DFLubuntu:~/testproject$ git diff --staged
dang@DFLubuntu:~/testproject$ git diff
diff --git a/a.txt b/a.txt
index 5f2f16b..4f142ee 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 1111
+2222
dang@DFLubuntu:~/testproject$ 

方法三:git reset HEAD <filename>

  • 自上次提交来,工作目录的filename发生变更且已经暂存,reset就能将暂存区filename重置为为上次提交后暂存前的老版本
dang@DFLubuntu:~$ mkdir testproject
dang@DFLubuntu:~$ cd testproject
dang@DFLubuntu:~/testproject$ git init
已初始化空的 Git 仓库于 /home/dang/testproject/.git/
dang@DFLubuntu:~/testproject$ echo '1111' > a.txt
dang@DFLubuntu:~/testproject$ git status -s
?? a.txt
dang@DFLubuntu:~/testproject$ git diff
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
A  a.txt
dang@DFLubuntu:~/testproject$ git diff --staged
diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..5f2f16b
--- /dev/null
+++ b/a.txt
@@ -0,0 +1 @@
+1111
dang@DFLubuntu:~/testproject$ git commit -m '第一次提交a.txt' a.txt
[master (根提交) c588f67] 第一次提交a.txt
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
dang@DFLubuntu:~/testproject$ git status -s
dang@DFLubuntu:~/testproject$ git diff
dang@DFLubuntu:~/testproject$ git diff --staged
dang@DFLubuntu:~/testproject$ echo '2222' >> a.txt
dang@DFLubuntu:~/testproject$ git status -s
 M a.txt
dang@DFLubuntu:~/testproject$ git diff
diff --git a/a.txt b/a.txt
index 5f2f16b..4f142ee 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 1111
+2222
dang@DFLubuntu:~/testproject$ git add a.txt
dang@DFLubuntu:~/testproject$ git status -s
M  a.txt
dang@DFLubuntu:~/testproject$ git diff --staged
diff --git a/a.txt b/a.txt
index 5f2f16b..4f142ee 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 1111
+2222
dang@DFLubuntu:~/testproject$ git reset HEAD a.txt
重置后取消暂存的变更:
M	a.txt
dang@DFLubuntu:~/testproject$ git status -s
 M a.txt
dang@DFLubuntu:~/testproject$ git diff --staged
dang@DFLubuntu:~/testproject$ git diff
diff --git a/a.txt b/a.txt
index 5f2f16b..4f142ee 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 1111
+2222
dang@DFLubuntu:~/testproject$ 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/98074.html

(0)

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!