Git本地版本控制管理(二)

本系列为个人学习Git参照廖雪峰老师的笔记

  • 本文内容:Git本地版本控制管理

参考笔记:

https://www.liaoxuefeng.com/wiki/896043488029600

1 Git版本控制

1-2 查看修改内容

// 查看当前仓库状态

git status

Practice
➜  learngit git:(master) vim teacher_ma.txt 
➜  learngit git:(master)cat teacher_ma.txt 
Teacher Ma eats three wolves

Teacher Ma eats shi tou ren

Teacher Ma is back to the home !!!
➜  learngit git:(master)git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     teacher_ma.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

// git diff 是工作区(work dict)和暂存区(stage)的比较

// git diff –cached #是暂存区(stage)和版本库的比较

git diff readme.txt

Practice
➜  learngit git:(master)git diff

diff --git a/teacher_ma.txt b/teacher_ma.txt
index 19058a2..e05a404 100644
--- a/teacher_ma.txt
+++ b/teacher_ma.txt
@@ -1,3 +1,5 @@
 Teacher Ma eats three wolves
 
 Teacher Ma eats shi tou ren
+
+Teacher Ma is back to the home !!!
(END)
Practice
1.比较修改之间的差异

git diff 不加参数即默认比较工作区与暂存区
git diff --cached [<path>...]比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
git diff HEAD [<path>...]比较工作区与最新本地版本库。如果HEAD指向的是master分支,那么HEAD还可以换成master
git diff commit-id [<path>...]比较工作区与指定commit-id的差异      
git diff --cached [<commit-id>] [<path>...]比较暂存区与指定commit-id的差异
git diff [<commit-id>] [<commit-id>]比较两个commit-id之间的差异

git diff详细

git add 之后
➜  learngit git:(master)git add teacher_ma.txt 
➜  learngit git:(master)git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	修改:     teacher_ma.txt

➜  learngit git:(master)
git commit 之后
➜  learngit git:(master)git commit -m "teacher ma is back to home"
[master ce1ee22] teacher ma is back to home
 1 file changed, 2 insertions(+)
➜  learngit git:(master) git status
位于分支 master
无文件要提交,干净的工作区
➜  learngit git:(master) 

1-3 版本回退

Practice

添加一次修改经历

➜  learngit git:(master) vim teacher_ma.txt 
➜  learngit git:(master)cat teacher_ma.txt 
Teacher Ma eats three wolves

Teacher Ma eats shi tou ren

Teacher Ma is back to the home !!!

Teacher Ma gank middle road @@@
➜  learngit git:(master)git add teacher_ma.txt 
➜  learngit git:(master)git commit -m "gank middle road"
[master 2871442] gank middle road
 1 file changed, 2 insertions(+)
git log

– 查看发布历史

git log

git log --pretty=oneline

– 查看命令历史

git reflog

Practice
➜  learngit git:(master) git log

commit 2871442553b0302cfa8d79fc3f39ad9fa8eb70c8 (HEAD -> master)
Author: Ruiskey <18130319287@163.com>
Date:   Thu Jul 8 16:48:26 2021 +0800

    gank middle road

commit ce1ee223e581dd2bea64162fd498caca41f7a2e9
Author: Ruiskey <18130319287@163.com>
Date:   Thu Jul 8 16:44:23 2021 +0800

    teacher ma is back to home

commit f2a1a21e1497b588fbccfbcc7bd70642c787fa4a
Author: Ruiskey <18130319287@163.com>
Date:   Thu Jul 8 16:29:14 2021 +0800

    teacher Ma's lesson
~
~
~
~
~
~
(END)
git log --pretty=oneline
➜  learngit git:(master) git log --pretty=oneline

2871442553b0302cfa8d79fc3f39ad9fa8eb70c8 (HEAD -> master) gank middle road
ce1ee223e581dd2bea64162fd498caca41f7a2e9 teacher ma is back to home
f2a1a21e1497b588fbccfbcc7bd70642c787fa4a teacher Ma's lesson
(END)

回退版本

方式1:

回退上一个版本

git reset --hard HEAD^

回退上上个版本

git reset --hard HEAD^^

方式2:

回退对应的版本号所指向的版本

git reset --hard ce1ee
命令历史
➜  learngit git:(master) git reflog

ce1ee22 (HEAD -> master) HEAD@{0}: reset: moving to ce1ee
2871442 HEAD@{1}: commit: gank middle road
ce1ee22 (HEAD -> master) HEAD@{2}: commit: teacher ma is back to home
f2a1a21 HEAD@{3}: commit (initial): teacher Ma's lesson
(END)

1-4 工作区和暂存区

Practice
➜  learngit git:(master) touch laoye_lu.txt
➜  learngit git:(master)ls
laoye_lu.txt  teacher_ma.txt
➜  learngit git:(master)git status
位于分支 master
未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

	laoye_lu.txt

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
➜  learngit git:(master)

初始状态
image-20210705212732389

git add之后

➜  learngit git:(master)git add laoye_lu.txt 
➜  learngit git:(master)git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	新文件:   laoye_lu.txt

image-20210705212814392

git commit之后

➜  learngit git:(master)git commit -m "create new file laoye_lu.txt"
[master 14bf57d] create new file laoye_lu.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 laoye_lu.txt
➜  learngit git:(master) git status
位于分支 master
无文件要提交,干净的工作区

image-20210705212839122

1-5 管理修改

如果修改没有添加(add)至暂存区,那么也不会被提交(commit)

Practice
➜  learngit git:(master)cat teacher_ma.txt 
Teacher Ma eats three wolves

Teacher Ma eats shi tou ren

Teacher Ma is back to the home !!!

Teacher Ma gank middle road @@@

Teacher Ma is unstoppable %%
➜  learngit git:(master)git add teacher_ma.txt 
➜  learngit git:(master)git status
位于分支 master
要提交的变更:
  (使用 "git restore --staged <文件>..." 以取消暂存)
	修改:     teacher_ma.txt

继续修改
➜  learngit git:(master)vim teacher_ma.txt 
➜  learngit git:(master)cat teacher_ma.txt 
Teacher Ma eats three wolves

Teacher Ma eats shi tou ren

Teacher Ma is back to the home !!!

Teacher Ma gank middle road @@@

Teacher Ma is unstoppable %%

shutdown $$$$
➜  learngit git:(master)git commit -m "teacher ma is unstoppable"
[master 176fa53] teacher ma is unstoppable
 1 file changed, 2 insertions(+)
➜  learngit git:(master)git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     teacher_ma.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

第一次修改 -> git add -> 第二次修改 -> git commit

1-6 撤销修改

撤销工作区的修改

git checkout – laoye_lu.txt

Practice
➜  learngit git:(master) vim laoye_lu.txt 
➜  learngit git:(master)cat laoye_lu.txt 
laoye lu is disapper ...

laoye lu is so cai !
➜  learngit git:(master)git checkout -- laoye_lu.txt 
➜  learngit git:(master) cat laoye_lu.txt 
➜  learngit git:(master) 

命令git checkout -- laoye_lu.txt意思就是,把laoye_lu.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是laoye_lu.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是laoye_lu.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

撤销暂存区的修改

如果不幸将文件已经提交至暂存区,可以使用 git reset

撤销git add的操作

  1. git reset HEAD laoye_lu.txt ## 回退暂存区
  2. git reset --hard HEAD^ ## 回退版本
Practice
➜  learngit git:(master) vim laoye_lu.txt 
➜  learngit git:(master)cat laoye_lu.txt 
laoye lu is disapper ...

laoye lu is so cai !

➜  learngit git:(master)git add laoye_lu.txt 
➜  learngit git:(master)git reset HEAD laoye_lu.txt 
重置后取消暂存的变更:
M	laoye_lu.txt
➜  learngit git:(master)cat laoye_lu.txt 
laoye lu is disapper ...

laoye lu is so cai !

➜  learngit git:(master)git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     laoye_lu.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

1-7 删除文件

删除

// 添加文件

git add test.txt

// 删除文件

git rm test.txt

// 提交文件

git commit -m “remove test.txt”

Practice
➜  learngit git:(master)touch test.txt
➜  learngit git:(master)git add test.txt
➜  learngit git:(master)git commit -m "create new file test.txt"
[master 0028773] create new file test.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt
➜  learngit git:(master) rm test.txt 
➜  learngit git:(master)git add test.txt
➜  learngit git:(master)git status
位于分支 master
要提交的变更:
  (使用 "git restore --staged <文件>..." 以取消暂存)
	删除:     test.txt
➜  learngit git:(master)git commit -m "remove test.txt"
[master 333b891] remove test.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 test.txt
➜  learngit git:(master) git status
位于分支 master
无文件要提交,干净的工作区

还原

错删之后还原

git checkout – test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

但是,只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值