git 关键知识点总结

书籍:
Pro Git(中文版) (感觉这个好)
Pro Git
练手网址:
在线练习
在线练习答案

在这里插入图片描述

git status 提示信息

git status 命令详解
Git三大特色之Stage(暂存区)
git 利用好git status的提示信息

Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: bbbb.txt

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: bbbb.txt

Untracked files:
(use "git add <file>..." to include in what will be committed)
Changes to be committed:
表示已经从工作区add到暂存区的file(文件或文件夹)。
可以通过 git restore --staged filename 命令将该file从暂存区移出,只有工作区有该文件,
该文件就为Untracked files。

Changes not staged for commit:
表示工作区,暂时区都存在的file(文件或文件夹),你在工作区又进行了修改或删除,但是没有add到暂存区。
可以通过 git add file 命令将变更(修改,删除)的file add到暂存区,
此时该file没有Changes not staged for commit状态,也就是Changes not staged for commit将没有改file的记录了。
可以通过 git restore  file 的命令取消在file在工作区的变更,
那么暂存区的file内容还是以前的,并且file在Changes not staged for commi状态下没有记录。

Untracked files:
表示只在工作区有的file(文件或文件夹),也就是在暂时区没有该file。

git reset

Git Reset 三种模式

     命令	
git reset (--mixed)                    
git reset --soft	                  
git reset --hard	         
--mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

--soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

--hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

现学现用:
如果你想要在别人的代码基础上进行添加(注意:此时那个人的代码还没有提交到主线上),你在push的时候又不想影响别人,那么你可以单独提一个,这样做:
(1)先cherry pick 他的代码,然后git reset --soft HEAD^
(2)添加自己的代码,最后一起提交。

git reset --hard HEAD^ 回退一个版本(注意:你所有的修改都没有了)

git 回滚操作 ★★★

详细参考:git checkout/git reset/git revert/git restore常用回退操作

这里有几种最常见的情况:★★★
0、还原00:工作区中未加到暂存区和版本库的文件,还原今天所做的修改
实话实说,办不到,没有加到过暂存区就没有被追踪,它的任何修改是没有办法回退的,可是使用 Ctrl+Z 碰碰运气,没准就退回到了你想要的状态。
1、还原01:工作区中未加到暂存区和版本库的文件,执行了 git add 操作
这种情况可以使用 git rm --cached newfile git restore --staged newfile 或者 git reset HEAD newfile命令,使用后两个命令的时候不能是版本库的第一个文件。
2、还原02:版本库中的文件,修改或删除后未执行 git add 操作
这种情况可以使用 git restore file_name git checkout – file_name 或者 git reset --hard HEAD 命令,最后的git reset 命令带有 --hard 参数不能再加文件目录,只能将工作区全还原。
3、还原03:版本库中的文件,修改或删除后执行了 git add 操作
使用了 git add 命令之后,文件的改变就放到了暂存区,这种情况可以使用 git restore --staged file_name 或者 git reset HEAD file_name 命令。
4、还原04:版本库中的文件,修改或删除后执行了 git add、git commit 操作
执行 git reset HEAD^这个命令之后,刚刚的提交记录就被抹掉了,文件状态就回到了 <还原02> 的情况,如果加上参数 --soft 就会回到 <还原03> 的情况,如果加上参数 --hard ,就不能添加 file_name 这个文件名,然后整个工作区倒退到上一次修改之前,其他两种参数 --mixed 和 --soft 就可以指定添加名字。

git rebase

rebase — Git中一个强大的忍者

执行 git rebase main 之后:

git pull --rebase

git pull = git fetch + git merge FETCH_HEAD 
git pull --rebase =  git fetch + git rebase FETCH_HEAD 

理解项目中用到的这两句:

git reset --hard HEAD^
git pull --rebase


git pull 和git fetch区别

Git中从远程的分支获取最新的版本到本地有这样2个命令:

  1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
    git fetch origin master
    git log -p master…origin/master
    git merge origin/master
    以上命令的含义:
    首先从远程的origin的master主分支下载最新的版本到origin/master分支上
    然后比较本地的master分支和origin/master分支的差别
    最后进行合并
    上述过程其实可以用以下更清晰的方式来进行:
    git fetch origin master:tmp
    git diff tmp
    git merge tmp
    从远程获取最新的版本到本地的test分支上
    之后再进行比较合并
  2. git pull:相当于是从远程获取最新版本并merge到本地
    git pull origin master
    上述命令其实相当于git fetch 和 git merge
    在实际使用中,git fetch更安全一些
    因为在merge前,我们可以查看更新情况,然后再决定是否合并

git cherry pick

当执行 git merge 或者 git rebase 时,一个分支的所有提交都会被合并。cherry-pick 命令允许你选择单个提交进行整合。
cherry-pick 把本分支或者其他分支的某一次或某几次提交,在当前分支上重演。操作单元是commit 不是branch)。

而理解 fetch 的关键, 是理解 FETCH_HEAD.
这里需要解释下什么是FETCH_HEAD?

FETCH_HEAD指的是: 某个branch在服务器上的最新状态.
每一个执行过fetch操作的项目都会存在一个FETCH_HEAD列表,
这个列表保存在 .git/FETCH_HEAD 文件中, 其中每一行对应于远程服务器的一个分支.
当前分支指向的FETCH_HEAD, 就是这个文件第一行对应的那个分支.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值