一、总览
1 git clone
2 git checkout
3 git pull
4 git add
5 git commit
6 git push
7 git fetch
8 git branch
9 git merge
10 git rebase
11 git diff
git show
12 git reset
13 git stash
14 git revert
15 git log
16 git reflog
17 git cherry-pick
18 git remote
19 git clean
20 git tag
21 git help
二、详述
1 git clone
git clone url: 克隆代码库
2 git checkout
git checkout branchA :切换到分支A
git checkout -b branchB origin/master :从master最新记录新建一个分支branchB
git checkout - - fileA: 把工作区中fileA的修改给撤销掉
git checkout -b dev2 <branch id>: 基于当前分支的某一个commit号创建分支
3 git fetch
git fetch:把远程分支的所有改变拉回本地
git fetch origin master: 把远程主机 origin上 master分支改变拉取到本地
4 git pull
git pull = git fetch + git merge
Git pull: 把当前分支关联的远程分支的最新改变拉倒本地,并进行merge操作
git pull origin master: 把远程master分支的最新改变拉倒本地,并进行merge操作
5 git add
git add: 将工作区文件提交到暂存区
git add -A: 提交所有变化
git add -u: 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add .: 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
6 git commit
Git commit -m “ feat: 提交信息信息”:提交一次commit到存储库
git commit - -amend 修改上一次commit信息/将本次修改amend到上一次commit
7 git push
HEAD:当前commit的引用,可以使用HEAD代表当前引用
git push origin local_branch:remote_branch: 将本地分支推送到远程分支
git push origin: 如果本地分支和远程分支有绑定关系,可以省略分支名
git push origin :staging <=> git push origin - -delete staging: 省略本地分支,相当于删除远程分支staging
git push origin HEAD:staging: 将当前commit push到远程origin服务器的staging分支
git push -f origin HEAD:staging: 暴力推到远程
git push origin HEAD:refs/for/master: 进行代码review
8 git branch
git branch -a : 查看本地和远程所有分支
git branch -d xx:删除本地xx分支
git branch -m old new: 重命名分支名字
git branch -vv: 查看当前分支和关联的远程分支
9 git merge
git merge origin/master :合并origin/master分支到当前分支,自动进行新的提交
git merge - -no-commit origin/master:合并origin/master分支到当前分支,不自动进行新的提交
10 git rebase
git rebase origin/master: 合并origin/master到当前分支,以rebase的方式合并过来
git rebase - -contiue: 在rebase的过程中,如果有冲突会停止合并,解决冲突后,git add, 然后git rebase - -contiue就会继续合并之后的
git rebase - -abort: 撤销到rebase之前的状态
git rebase -i:合并几次commit为一个连接
1 git rebase -i commitid:合并最新提交到commitid之前的提交为一次,commitid这次不合并;
git rebase -i HEAD~2: 合并最近两次提交为一次commit;
2 会跳到vim界面,修改被合并的提交指令为:squash;
指令含义:
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s),两个注释分成两行。
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f),只保留前一个commit信息。
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
3 如果有冲突解决冲突,修改完成之后,然后:
Git add .
git rebase - -contiue
4 git push -f HEAD:staging(git push -f前再次检查git log)
11 git diff:
git diff: 不加参数即默认比较工作区与暂存区
git diff commitid commitid: 比较两次提交之间的差异
git diff commitid [<path>]: 比较工作区path路径文件和指定提交之间的差异
git diff HEAD [<path>]: 比较工作区path路径文件和最新本地库之间的差异
12 git show
git show[commit]:# 显示某次提交的元数据和内容变化
git show--name-only[commit]:显示某次提交发生变化的文件
git show[commit]:[filename]:显示某次提交时,某个文件的内容
13 git log
git log -p :查看每个更新之间的差异,按F下一页比较
git log -p -2: 查看最近两个提交之间的差异
git log - - author=liwenfeng: 查看author是liwenfeng的commit
git log - - committer=liwenfeng:查看提交者是liwenfeng的commit
git log - - grep=xx: 查看含关键字的提交
git log--pretty=oneline:只显示commitID和备注消息
14 git stash
git stash save -u “暂时保存”:-u: 把工作区、暂存区和新建的文件全部暂存起来;
git stash apply/ git stash apply stash@id: 将堆栈中最近一次改变回复到工作区,堆栈中保留这个stash提交
git stash pop : 将堆栈中最近一次改变回复到工作区,删除堆栈中内容
git stash list : 查看堆栈中的提交列表
git stash show stash@{id} : 查看某次提交的内容
git stash drop: 删除堆栈最近一次
git stash drop stash@{id}: 删除指定id的一次内容
git stash clear: 清空堆栈列表
15 git revert
git revert commitid: 生成一个新的commit,这个commit和上一次代码刚好抵消
git commit —amend
git push origin HEAD:refs/master
git revert a^..c: revert多次提交,按先后顺序提交了a,b,c 想revert掉这三次提交
16 git reset
git reset HEAD 1.txt:撤销add到暂存区的文件
如果文件1.TXT已经被提交到缓存区,但是我后悔add这个文件,那么用这个命令撤销对这个文件的add,此时这个文件回到工作区,如果还想回退某些修改,可以继续用上面一条指令
(两个下划线之间没有空格)
git reset HEAD^(或commitid):默认使用git reset,不加任何参数就是这个,回退到上一个提交版本(指定提交版本),此时commit和暂存区被回退到和指定的一样;
git reset - -soft HEAD^(或commitid):回退到上一个提交版本(指定提交版本),此时只是回退了commit的信息,本地的源码和暂存区和回退之前是一样的;
git reset - -hard HEAD^(或commitid):往前回退到指定版本,源码改变(所以,要慎用,可能回退之前修改的代码会丢失,特使是回退之前没有add和commit过,如果commit过,可以使用:git retlog查看历史操作的
git reset - -mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息commitid)
17 git cherry-pick
git cherry-pick commitA : 把A分支上的commitA cherry到当前分支上来,并且在当前分支形成一个提交
git cherry-pick commitid -n : 此时这个提交没有自动提交到新分支
如果产出冲突,解决完冲突后:
git cherry-pick - -contiue: 处理合并
git cherry-pick - - abort: 取消cherry
cherry多个commit,最方便操作是用ide上批量选择
18 git remote
git remote -v: 查看远程仓库情况「显示:仓库 url」
git remote show origin : 查看远程仓库origin的详细情况
git remote add new_originhttps://github.com/xxx: 添加远程仓库,新的仓库名字是new_origin
git remote rm origin: 移除远程仓库origin
git branch -vv : 查看远程仓库分支情况
git push origin - -delelte xx_branch: 删除远程xx_branch分支
19 git clean
git clean -n 是一次clean的演习, 告诉你哪些文件会被删除. 记住他不会真正的删除文件, 只是一个提醒
git clean -f 删除当前目录下所有没有track过的文件. 他不会删除.gitignore文件里面指定的文件夹和文件, 不管这些文件有没有被track过
git clean -f <path> 删除指定路径下的没有被track过的文件
git clean -df 删除当前目录下没有被track过的文件和文件夹
git clean -xf 删除当前目录下所有没有track过的文件. 不管他是否是.gitignore文件里面指定的文件夹和文件
20 git tag
git tag: 查看所有标签(按字母排序)
git show tag1: 查看tag1的详细信息
git tag v1.0.0: 给当前commit(HEAD)打一个标签
git tag v1.0.0 -m “desc": 给当前commit(HEAD)打一个标签,添加描述信息
git tag v1.0.0 commitId: 给commitId这个commit打一个标签
git push origin v1.0.0: 把v1.0.0这个标签推送到远端
git push origin - -tags: 推动本地所有标签
git tag -d v1.0.0: 删除本地标签
git push origin :refs/tags/v1.0.0:删除远程标签v1.0.0
21 git reflog
git reflog:查看本地所有分支的操作
恢复已经被reset - -hard的代码:git reset - -hard到上一次+git cherry-pick当前
git reflog: 查看记录
https://cloud.tencent.com/developer/article/1413097
22 tig
1 快速把staged->unstage或是unstage ->staged
tig进入主界面后,j/k上下移动,选择unstage后,回车,然后输入u,则把所有unstage变为staged, staged->unstage同样
单个文件的改变,tig进入log页面后,输入s, 查看status, j/k上下选择一个文件,输入u, 即可改变状态
2 查看commit详情
tig进入主界面后,j/k上下移动选择commit, 回车即可查看commit详情,j/k上下选择文件
3 快速查看不同分支代码
tig进入主界面后, 输入r,即可看到不同的分支列表, 选中分支会回车,即可进入log界面, 选中分支后,shift+c即可切换分支
Type 规范
type 用于说明 commit 的类别,必须为以下类型的一种:
* feat: 新的功能
* fix: 修复 bug
* docs: 只是文档的更改
* style: 不影响代码含义的更改 (例如空格、格式化、少了分号)
* refactor: 既不是修复 bug 也不是添加新功能的代码更改
* perf: 提高性能的代码更改
* test: 添加或修正测试
* chore: 对构建或者辅助工具的更改,例如生成文档