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

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$ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值