Git

Catalogue
  1. 1. 原理
    1. 1.1. 四大区
    2. 1.2. HEAD
  2. 2. 常用命令
    1. 2.1. cherry-pick
      1. 2.1.1. git cherry-pick <commit id>
      2. 2.1.2. git cherry-pick <start-commit-id>^..<end-commit-id>
      3. 2.1.3. git cherry-pick --abort
    2. 2.2. stash
      1. 2.2.1. git stash
      2. 2.2.2. git stash list
      3. 2.2.3. git stash apply
      4. 2.2.4. git stash pop
    3. 2.3. revert
      1. 2.3.1. git revert <commit>
      2. 2.3.2. git revert HEAD~3
    4. 2.4. reset
      1. 2.4.1. 三种模式
      2. 2.4.2. git reset
      3. 2.4.3. git reset --hard HEAD~3
      4. 2.4.4. git reset -- <file>
    5. 2.5. reflog
    6. 2.6. rebase
  3. 3. 应用场景

原理

四大区

  • 工作区(Working Directory)
  • 暂存区(Stage or index)
  • 本地库
  • 远程库

各区的转换图如下

Imagem de capa

HEAD是一个特殊的指针,指向当前工作分支的最新commit

常用命令

cherry-pick

再次应用已经存在的commits,可以将其他分支的某些commit应用到当前分支。

git cherry-pick <commit id>

git cherry-pick <start-commit-id>^..<end-commit-id>

应用这一区段的commits,左闭右闭。

git cherry-pick --abort

取消操作

stash

在某些分支上进行了改动,但是还没有完成,也没有提交,这个时候又要切到另外一个分支上进行工作。

git stash

git stash list

git stash apply

恢复到上次stash的状态

git stash pop

恢复到上次stash的状态并去掉上次的stash

revert

将某些commit回退掉,同时会生成新的commit来记录这次操作

git revert <commit>

git revert HEAD~3

撤销倒数第四次commit。

reset

三种模式

  • – mixed。回退暂存区,工作区不动。也就是说改动的文件不会动但是会回退到未提交状态。—mixed是默认选项。
  • – hard。 暂存区和工作区都会被回退掉。
  • – soft。 暂存区和工作区都不会动,回退到指定的commit之后,这个commit之后的文件都处于changed to be committed状态。

git reset

git add 之后想撤销就可以用这个命令

git reset --hard HEAD~3

最近三次提交不想要了,也不想再看到它们。可以使用这个命令。

git reset -- <file>

回退单个文件。

reflog

ref + log

reflog命令可以查看所有的历史操作记录

比如误操作用了git reset --hard HEAD^

这时候用git log是找不到原来的commit的,这时候可以用git reflog找到commit id来进行恢复。

rebase

将某个分支的修改移动到当前分支,依次将提交作用到当前分支,作用到过程中生成新的提交记录,提交信息默认与原来的一致。

应用场景