git 语法学习小记

目录

    • 1、基础:git commit、git branch、git merge、git rebase
    • 2、高级:分离HEAD、相对引用^、相对引用2~(可强制移动分支)、撤销变更
    • 3、移动提交:自由修改提交树——git cherry-pick、交互式rebase
    • 4、杂项:Git技术、技巧与贴士大集合——只取一个提交记录、提交的技巧#1/2、git tag、git describe。
    • 5、级话题:多次rebase、两个父节点、纠缠不清的分支

1、基础:git commit、git branch、git merge、git rebase

//创建新的提交记录
git commit
//创建新的分支(如图1)
git branch newImage
git checkout newImage;git commit

合并分支法一:

//如图2,把 【bugFix】 合并到 main 里
git merge bugFix   (前者,带星号)
//把【main】 分支合并到 bugFix
git checkout bugFix;git merge main

合并分支法二:

//把 bugFix 分支里的工作直接移到 【main】 分支上,图3
git rebase main  (后者,无星号)
//把main分支rebase到【bugFix】
git rebase bugFix

练习(6步?)

git branch bugFix;
git checkout bugFix;git commit;
git checkout main;git commit;(切换出两条分支) 
git checkout bugFix;git rebase main。

2、高级:分离HEAD、相对引用^、相对引用2~(可强制移动分支)、撤销变更

HEAD指向正在进行工作的提交记录,通过指向分支名——通过cat .git/HEAD、git symbolic-ref HEAD查看HEAD指向。(HEAD指向本身)

git checkout C1;   //由HEAD->main->C1,变成HEAD->C1
# git checkout main;git commit; git checkout C2

git log查看提交记录的哈希值,使用^向上移动一个提交记录,~2或n向上移动多个提交记录;

main相当于main的父节点,main^相当于main的第二个父节点。(HEAD指向上一级)

git checkout bugFix^
git checkout bugFix~3
#  !!! 移动分支:-f让分支指向另一个提交。以下将main分支强制指向HEAD的第3级父提交。
git branch -f main HEAD~3

练习:

git branch -f bugFix HEAD~2;
git branch -f main C6;
git checkout HEAD^
#退回上一个(删去C2,保留C1)——本地分支
git reset HEAD~1
#引入C2'相当于C1的状态——远程分支
git revert HEAD

3、移动提交:自由修改提交树——git cherry-pick、交互式rebase

//(1)已知提交记录的哈希值
git cherry-pick C2 C6 C4
//(2)未知哈希值,有一系列的提交记录。使用带参数--interactive的rebase命令,简写为-i;UI窗口用VIM打开。
git  rebase -i HEAD~4

备注:鼠标拖放调整顺序,(omit)切换 pick 的状态删除提交,合并提交(暂不支持)。

4、杂项:Git技术、技巧与贴士大集合——只取一个提交记录、提交的技巧#1/2、git tag、git describe。

(1)本地栈式提交

# main分支得到bugFix的相关提交
git rebase -i HEAD~3;
git cherry-pick;

(2)提交的技巧1

#相当于上次提交错误的信息被覆盖了,重新加了个信息(C'')
git commit --amend

5、级话题:多次rebase、两个父节点、纠缠不清的分支

(1)多分支rebase(4条?)

git checkout bugFix
git rebase main
git checkout side
git rebase bugFix
git checkout another
git rebase side
git branch -f main another

备注:HEAD大写,其他git命令小写。使用undo和reset可以恢复原样。

你可能感兴趣的:(git)