平时也多是使用 IDEA 自带的 Git 插件,简单又方便,不需要理解 Git 背后的技术,最近突然让我在 VsCode 上更新提交代码,发现又需要学习 VsCode 的插件使用,思量一番后,决定好好学习一下 Git 命令的使用。由于工作需要,对于 Git 的使用又有了新的要求,之前简单的 push、pull 命令已经无法满足平常的使用,因此专门找了个网站实操了一遍,同时将相关内容整理成文档,供后续翻看。
Git基本操作
以下操作来源:https://learngitbranching.js.org/?locale=zh_CN
commit提交
git commit
Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!
有时你提交过代码之后,发现一个地方改错了,你下次提交时不想保留上一次的记录;或者你上一次的 commit message 的描述有误,这时候你可以使用接下来的这个命令:git commit --amend。
查看如下案例:
$ git checkout master
$ git cherry-pick C2
$ git commit --amend
$ git cherry-pick C3
branch创建分支
git branch newBranchName
创建分支后,然后切换到当前新分支下。
git checkout newBranchName
如果你想创建一个新的分支同时切换到新创建的分支的话,可以通过 git checkout -b
来实现。
git checkout -b newBranchName
查看远程分支
git branch -r
拉取远程分支并创建本地分支
git checkout -b 本地分支名x origin/远程分支名x
使用该方式会在本地新建分支x,并自动切换到该本地分支x。采用此种方法建立的本地分支会和远程分支建立映射关系。
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动 checkout。采用此种方法建立的本地分支不会和远程分支建立映射关系。
checkout检出/切换分支
将指定版本/tag/分支的代码检出,如果当前存在未提交的代码禁止做此操作。
merge合并
合并两个分支,存在冲突时,能自动合并的会自动合并,不能自动合并的会产生冲突,需要人工处 理。解决冲突的时候,只需要处理冲突的文件,当前工作目录会存在大量提交的文件,不要去还原这些文件,不要去还原这些文件,不要去还原这些文件。
// 创建bugFix新分支,并切换到该分支
git checkout -b bugFix;
//加入做了修改,然后提交
git commit
//切换到master分支,然后做修改并提交
git checkout master
git commit
//将bugFix分支的内容合并到master
git merge bugFix
分离Head
目标: 从 bugFix
分支中分离出 HEAD 并让其指向一个提交记录。
执行下述命令:
git checkout master
git checkout C4
移动
// 切换分支到C2的父节点C1
git checkout C2^
上述 ^ 命令一次只能移动一个位置,比较缓慢。接下来我们学习一个新命令。
移动分支可以直接使用 -f
选项让分支指向另一个提交。例如:
git branch -f master HEAD~3
上面的命令会将 master 分支强制指向 HEAD 的第 3 级父提交。
如何将下图中右边的分支修改成左边的样式:
$ git checkout HEAD^
$ git branch -f bugFix HEAD^
$ git branch -f master C6
^ 和 ~ 的组合操作
上述三条命令可以简化为下面一条命令。
作业:
git branch bugWork HEAD~^2~
或者
git branch -f bugWork