git学习笔记——管理、撤销修改

GIT学习笔记

修改管理、撤销

管理修改

  • 为什么Git比其他版本的控制系统设计的优秀,因为Git跟踪并管理的是修改,而非文件。也就是说,所有修改,比如增加一行、删除一行、甚至创建一个新文件也算是修改。
  • 为什么说Git管理的是修改而不是文件呢?我们可以做一个实验,第一步,对readme.txt做一个修改,比如加一行内容并添加:
$ git add readme.txt 
$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)
  • 然后,再修改readme.txt并提交:
$ git commit -m "git tracks changes"
[master 376d9c0] git tracks changes
 1 file changed, 1 insertion(+)
  • 提交后,再看看状态:
$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"
  • 我们发现,第二次的修改没有被提交。回顾一下操作过程:
    第一次修改->git add->第二次修改->git commit
  • 前面讲到,git管理的是修改,当使用git add命令后,在工作区的第一次修改被放入暂存区准备提交。但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次修改不会被提交。
  • 提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.
  • 可见,第二次修改确实没有被提交。
  • 那怎么才能提交第二次修改呢?可以继续git addgit commit,也可以不着急提交第一次修改,先git add第二次修改,再git commit,相当于是把两次修改合并后一起提交了。

撤销修改情况一

  • 如果在readme.txt文件中多添加了一行,提交后,用git status查看,Git会提示使用git checkout -- <file>...可以丢弃工作区的修改。
$ git checkout -- readme.txt
  • 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
    • 一种是readme.txt自修改后还没有放到暂存区,现在,舍小修改就回到和版本库一模一样的状态;
    • 一种是readme.txt已经添加到暂存区后,又做了修改,现在,撤销修改就回到添加到暂存区后的状态。
  • 总之,就是让这个文件回到最近一次git commitgit add时的状态。
  • 撤销后,我们再看看readme.txt文件内容:
$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
  • 文件内容复原了
  • 注意:git checkout -- file命令中的--很重要,没有--,就变成了切换到另一个分支的命令,我们在后面的分支管理中会再次遇到git checkout命令。

撤销修改情况二

  • 如果要被撤销的内容不但被写入了文件,还被git add添加到暂存区了,在commit前发现了这个问题,用git status查看,修改只是添加到了暂存区,还没有被提交:
$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	修改:     readme.txt
  • Git同样告诉我们,用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。
$ git reset HEAD readme.txt
重置后取消暂存的变更:
M	readme.txt
  • 再用git status查看一下,确保暂存区是干净的,工作区有修改
$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"
  • 这样我们可以再使用checkout来丢弃工作区的修改。

撤销修改情况三

  • 如果把要被修改的文件提交到了版本库,我们就要使用前面学过的版本回退 。不过这是有条件的,即在推送到远程版本库之前进行版本回退。

删除文件

  • 在Git中,删除文件也是一种修改操作,我们先添加一个test.txt文件到Git中并提交:
$ git add text.txt 
$ git commit -m "add text.txt"
[master 89274d2] add text.txt
 1 file changed, 2 insertions(+)
 create mode 100644 text.txt
  • 然后如果我们想删除那些没用的文件,就可以直接在文件管理器中删除、或者使用rm命令删除:
$ rm text.txt 
  • 这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:
$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	删除:     text.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"
  • 现在有两种选择,一是确实从版本库中删除文件,就用命令git rm删掉,并且git commit
$ git rm text.txt 
rm 'text.txt'

$ git commit -m "delete text.txt"
[master acc1af6] delete text.txt
 1 file changed, 2 deletions(-)
 delete mode 100644 text.txt
  • 这样就把文件从版本库中删除了。

先手动删除文件,再使用git rm <file>git add <file>效果是一样的。

  • 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
  • git checkout其实是用版本库里的版本替换工作区的版本,所以无论工作区是修改还是删除,都可以“一键还原”。

注意:从来没有被添加到版本库就被删除的文件,是无法恢复的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值