Git Brief
常用命令
命令 | 描述 | 详情 |
---|---|---|
.gitignore |
声明无需纳入git 管理的文件 |
空行或以# 开头的行都会被忽略。可以使用标准的 glob 模式匹配。匹配模式可以以 / 开头防止递归。匹配模式可以以 / 结尾指定目录。要忽略指定模式以外的文件或目录,可以在模式前加上 ! 取反。 |
.gitkeep |
保留空文件夹 | |
git difftool --tool-help |
查看系统支持哪些diff 插件 |
|
git config --global core.editor vim |
设置核心编辑器为vim
|
|
git config --global diff.tool p4merge |
设置diff 工具为p4merge
|
设置vscode作为默认diff工具 |
git config --global merge.tool p4merge |
设置merge 工具为p4merge
|
|
git config --global alias.s status git config --global alias.logs \ 'log --oneline --graph'
|
定义git status 命令的别名为git s
|
|
git init |
在项目根目录下创建一个.git 子目录 |
|
git clone -o o \ https://github.com/xx/yy zz
|
克隆yy 项目源到本地,并重命名为zz ,且远程仓库引用名origin 重命名为o
|
|
git ls-remote |
获得远程引用的完整列表 | |
git remote |
查看远程仓库的简写 | |
git remote -v |
查看远程仓库的简写和与其对应的仓库地址 | |
git remote add <remote-name> <url> |
添加一个新的远程仓库 | |
git remote show [remote-name] |
查看远程仓库 | |
git remote rename origin o |
将origin 远程仓库重命名为o
|
|
git remote rm origin |
移除origin 远程仓库 |
|
git fetch [remote-name] |
访问远程仓库,从中拉取所有本地还没有的数据 | 不会自动合并或修改你当前的工作,你必须手动合并。 |
git fetch origin a:b |
拉取远程分支a 到新本地分支b
|
|
git pull |
自动的抓取然后合并远程分支到当前分支 | You have not concluded your merge (MERGE_HEAD exists) git拉取失败 |
git pull -r |
自动抓取远程分支并依此变基,重放本地分支变更 | |
git push [remote-name] [branch-name] |
推送本地分支变更到远程仓库 | |
git push origin a:b |
推送本地分支a 到一个命名不相同的远程分支b
|
|
git push origin --delete a |
删除远程a 分支 |
|
git push origin :a |
删除远程a 分支 |
|
git push origin :refs/tags/v1.0 |
删除远程v1.0 标签 |
|
git push -u origin a:aa |
推送a 分支工作到服务器上的aa 分支上,使用-u 标记设置追踪关系,便于之后轻松地推送与拉取配置分支 |
|
git push origin a -f |
强制提交本地变更覆盖远程分支a
|
|
git status |
检查当前文件状态 | |
git status -s |
检查当前文件状态简览 |
?? : 新添加的未跟踪文件A : 新添加到暂存区中的文件M : 修改过的文件但是还没放入暂存区M : 修改过的文件且已放入暂存区 |
git add README |
跟踪新的README 文件/暂存已修改的README 文件 |
|
git diff |
查看未暂存的修改 | |
git diff --cached git diff --staged
|
查看已暂存的修改 | |
git commit |
提交暂存的更新到本地仓库 | |
git commit -v |
提交暂存的更新并显示提交具体修改的内容详情 | |
git commit -m 'xxx' |
提交暂存的更新并直接填写提交信息 | |
git commit -a -m 'xxx' |
提交更新并跳过使用暂存区域(省略git add 步骤)
|
|
git commit --amend |
若未做任何修改,则仅修改上次提交说明;若又做了修改,则合并当前修改到上一次提交 | |
git rm README |
移除README 文件 |
命令后面可以列出文件/目录的名字,也可以使用glob 模式,例如git rm log/\*.log
|
git rm -f README |
强制移除README 文件且不关心在移除前是否修改或修改后是否暂存
|
|
git rm --cached README |
从暂存区域移除README 文件但仍保留在当前工作目录
|
|
git mv README README.md |
将README 文件改名为README.md
|
命令等价于mv README README.md; git rm README.md; git add README
|
git log |
查看提交历史 | 仅显示每个提交的SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明 |
git log -p -2 |
查看最近两次提交 每次提交的内容差异历史 | |
git log --stat |
查看每次提交的简略的统计信息历史 | |
git log --pretty=oneline |
查看提交历史,仅显示每个提交的SHA-1 校验和提交说明
|
还有short ,full ,fuller 和format 可用 |
git log --pretty=format:"%s" --graph |
查看提交历史,仅显示提交说明且添加一些ASCII字符串来形象地展示你的分支、合并历史 | format常用的选项 |
git log --since=2.weeks git log --after=2.weeks
|
查看提交历史,仅显示最近两周内的改动 | |
git log --until="2008-11-01" git log --before="2008-11-01"
|
查看提交历史,仅显示2008-11-01 之前的改动
|
|
git log -SfunctionA |
查看提交历史,列出那些添加或移除了函数名functionA 字符串的提交 |
要得到同时满足这两个选项搜索条件的提交,就必须用--all-match 选项。否则,满足任意一个条件的提交都会被匹配出来 |
git log --author bob --grep 'doc' |
查看提交历史,搜索作者是bob 提交说明中包含doc 字符串的提交 |
|
git log --oneline --decorate |
查看各个分支当前所指的提交对象 | |
git log --no-merges a..origin/master |
只显示所有在origin/master 分支但不在a 分支的提交列表 |
|
git tag |
列出标签 | |
git tag -l 'v1.0*' |
使用特定的模式查找标签 | |
git tag v1.0 |
创建一个轻量标签 | 像一个不会改变的分支 - 它只是一个特定提交的引用。本质上是将提交校验和存储到一个文件中,没有保存任何其他信息 |
git tag -a v1.0 -m 'version 1.0' |
创建一个附注标签 | 存储在git 数据库中的一个完整对象,是可以被校验的。其中包含打标签者的名字、电子邮件地址、日期时间、标签信息;并且可以使用GPG 签名与验证 |
git tag -a v1.0 9fceb02 |
在9fceb02 提交上打标签 |
|
git show <tag-name> |
查看标签信息与对应的提交信息(仅附注标签有) | |
git push origin [tag-name] |
推送标签到远程服务器 | |
git push origin --tags |
推送所有不在远程服务器上的标签 | |
git checkout -b [branch-name] [tag-name] |
在特定的标签上创建一个新分支 | |
git branch |
列出当前所有分支 | |
git branch -v |
列出当前所有分支,并显示每一个分支的最后一次提交 | |
git branch --merged |
查看哪些分支已经合并到当前分支 | 该列表中分支名字前没有* 号的分支通常可以删除;因为已经将它们的工作整合到当前分支,所以并不会丢失任何东西 |
git branch --no-merged |
查看所有包含未合并工作的分支 | |
git branch <branch-name> |
创建新分支 | |
git branch -b <branch-name> |
新建一个分支并同时切换到该分支 | |
git branch -d <branch-name> |
删除分支 | |
git branch -D <branch-name> |
强制删除分支 | |
git branch -vv |
基于本地缓存的服务器数据,列出每一个分支正在跟踪哪个远程分支,本地分支是否是领先、落后或是都有 | |
git fetch --all; git branch -vv |
基于远程服务器数据,列出每一个分支正在跟踪哪个远程分支,本地分支是否是领先、落后或是都有 | |
git checkout -- README |
撤消对README 文件的修改 |
|
git checkout develop |
切换到develop 分支 |
HEAD 就指向develop 分支了,HEAD 可想象为当前分支的别名
|
git checkout -b a origin/a |
创建一个本地分支且追踪origin/a 远程分支 |
|
git checkout -u origin/a |
设置当前分支追踪origin/a 远程分支 |
|
git revert 4d66945 |
产生一次新提交,抵消掉4d66945 提交 |
|
git reset HEAD README |
取消暂存的README 文件 |
|
git reset --hard 4d66945 |
撤销4d66945 之后的提交,既撤消提交历史也撤销提交内容变更
|
|
git reset --soft 4d66945 |
撤销4d66945 之后的提交,仅撤消提交历史可再次整理提交 |
|
git stash |
将本地修改临时储藏到脏工作目录,会储藏未暂存的修改和通过git add 已暂存的工作,但不储藏未追踪的文件
|
|
git stash -u |
将本地修改临时储藏到脏工作目录,会储藏未追踪的文件、未暂存的修改、通过git add 已暂存的工作 |
|
git stash --keep-index |
仅储藏未跟踪文件到脏工作目录 | |
git stash push -m 'fix issue-1' |
将本地修改临时储藏到脏工作目录,并增加一些描述信息备忘 | |
git stash --patch |
交互式地提示哪些改动想要储藏、哪些改动需要保存到脏工作目录中 | |
git stash list |
查看所有的储藏工作 | |
git stash pop |
应用并删除最近一次的储藏工作 | |
git stash apply [email protected]{1} |
应用指定版本的储藏工作,不会删除该储藏工作 | |
git stash drop [email protected]{0} |
删除指定版本的储藏工作 | |
git stash clear |
清空所有的储藏工作 | |
git cherry-pick e43a6fd |
拣选工作流中的e43a6f 提交 |
|
git merge <branch-name> |
合并分支 | 当前分支A 是待合并分支B 的祖先,合并无冲突,简单的将当前分支A 指针向前推进到B ,也就是“快进(fast-forward )”。当前分支 A 不是待合并分支B 的直接祖先,合并无冲突,使用A 和B 分支的共同祖先和两分支末端所指快照,做一个简单的三方合并。当前分支 A 不是待合并分支B 的直接祖先,合并有冲突,做合并但不自动地创建一个新的合并提交,暂停下来等待用户解决冲突 |
git merge --squash a |
合并a 分支的改动,并压缩其上的所有工作成一个单独的提交 |
|
git rebase -i a |
基于a 分支变基,将当前分支的工作压缩成一个单独的提交,或者重排提交中的工作使补丁更容易被维护者审核 |
|
git rebase --onto master a b |
取出b 分支,找出处于b 分支和a 分支的共同祖先之后的修改,然后把它们在master 分支上重放一遍 |
|
git hash-object -w README |
把README 的当前内容压缩成二进制文件,存入git ,保存在.git/objects 目录 |
|
git cat-file -p \ 1b1c4db97090d586637f2369348c91e452395b23
|
查看该文件原始的文本内容 | |
git update-index \ --add --cacheinfo 100644 \ 1b1c4db97090d586637f2369348c91e452395b23 README
|
将README 文件的首个版本加入到了一个新的暂存区域中 |
100644 :表明这是一个普通文件100755 :表示可执行文件120000 :表示符号链接 |
git ls-files |
显示暂存区当前的内容 | |
git write-tree |
将暂存区域的内容写到一个tree 对象 |
|
echo 'first commit' | git commit-tree d8329f |
依据tree 目录树对象创建一个commit 提交对象 |
分支实践
参考链接: Git Community Book & Git Book EN & Git Book ZH & Git 教程& Pro Git & Git 快速开始 & Git Interactive Learning & Git P4Merge & Git 分支最佳实践 & 如何正确使用Git Flow & Github 参考工作流