配置目录:
.git/config
用户:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config --list
$ git config user.name
查看忽略文件
cat .gitignore
暂存
$ git stash : 暂存修改
$ git stash : 查看所有的暂存修改
$ git stash apply : 将刚刚暂存的修改重新应用
$ git stash apply stash@{2} : 将指定暂存重新应用
$ gti stash apply --index : 重新应用暂存(文件改动被重新应用了,但是之前暂存的文件却没有重新暂存)
$ git stash pop : 重新应用暂存并且丢弃暂存
$ git stash --keep-index:不要储藏任何你通过 git add 命令已暂存的东西
$ git stash -u : 储藏任何创建的未跟踪文件
$ git stash --patch : 交互式地提 示哪些改动想要储藏、哪些改动需要保存在工作目录中
$ git stash branch <branch> : 创建 一个新分支,检出储藏工作时所在的提交
清理-移除
$ git clean :去除冗余文件或者清理工作目录
$ git clean -d -f : (-f强制)移 除工作目录中所有未追踪的文件以及空的子目录
$ git clean -d -n: (-n演示将要移除的目录
$ git clean -d -n -x: (-n演示将要移除的目录,-x指移除包含ignore文件)
$ git clean -x -i : 交互清理
$ git stash --all : 移除并放入栈中
要查看尚未暂存的文件更新了哪些部分,不加参数直接输入
git diff
git difftool
要查看已暂存的文件更新了哪些部分,不加参数直接输入
git diff --cached
无需暂存(git add)直接提交所有已跟踪的文件
git commit -a -m ''
让文件保留在磁盘,但是并不想让 Git 继续跟踪
$ git rm --cached README
更改名字
$ git mv file_a file_b
提交历史
$ git log
$ git log -p 每次提交内容差异
$ git log -p -2 : 最后两次内容差异
$ git log --stat :显示每次更新的文件修改统计信息
$ git log --pretty=oneline/short/full/fuller :格式化
$ git log --pretty=format:"%h - %an, %ar : %s" an:作者,cn:提交者
$ git log --graph : 展示你的分支、合并历史
$ git log --since=2.weeks : 最近两周的提交
$ git log --author=swx : 指定作者的提交
$ git log --committer=swx : 指提交者的提交
$ git log --grep='xxx' :关键字搜索提交
$ git log --author='' --grep='' --all-match :同时满足
$ git log -S function : 找出添加或移除了某一个特定函数的引用的提交
$ git log <branch> --not master : 查看在master上没有提交的branch分支记录
$ git log --abbrev-commit : 以简短SHA-1方式显示历史记录
$ git log master .. experiment : 在 experiment 分支中而不在 master 分支中的提交
$ git log origin/master .. HEAD : 查看你即将推送到远端的提交,以下三个命令等效
$ git log refA..refB
$ git log ^refA refB
$ git log refB --not refA
$ git log refA refB ^refC :查看提交在AB分支中但不在C分支中,以下等效
$ git log refA refB --not refC
$ git log A...B :查看提交在A或者在B分支中,但不同时存在
$ git log --left-right A...B: 查看哪些提交在A,哪些提交在B
重新提交(覆盖上一次提交)
$ git commit --amend
取消暂存
$ git reset head file_name
取消修改(回复到本次修改前状态,只对未暂存的修改有效)
$ git checkout -- file
远程仓库
$ git remote : 查看远程仓库
$ git remote -v : 查看远程仓库及相关读写地址
$ git remote add <name> <url> : 创建远程仓库
$ git fetch <name> : 同步信息(远程仓库中有的但本地没有的)
$ git remote show <name> : 查看远程分支详细
$ git remote rename <old_name> <new_name> :重命名远程仓库
$ git remote rm <name> : 删除远程分支
标签
$ git tag : 列出标签
$ git tag -a <tag> -m "标签备注" : 打标签
$ git show <tag> : 查看标签
别名
$ git config --global alias.<new_name> <old_name>
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
分支
$ git branch <branch_name> : 创建分支
$ git log --pretty=oneline --decorate : 查看提交对象所指分支
$ git log --oneline --decorate --graph --all : 查看所有分支走向
$ git checkout -b <new_branch> :直接创建新分支并且切换上去
$ git checkout -b <new_branch> <origin/master> : 基于远程master分支创建新分支并且换上去
$ git branch -d <branch> : 删除分支
$ git branch -D <branch> : 强制删除分支
$ git mergetool : 可视化解决冲突
$ git branch -v : 查看所有分支最后一次提交
$ git branch --merged : 查看已经合并到当前分支的所有分支
$ git branch --no-merged : 查看没有合并到当前分支的所有分支
$ git branch -vv : 查看所有分支的跟踪分支
$ git merge-base <branch1> <branch2> : 查看两个分支的共同祖先分支
分支–以下命令作用相同
$ git checkout -b branch origin/branch 将branch分支建立在远程分支之上
$ git checkout --track origin/branch 将branch分支建立在远程分支之上,等效于上面
$ git checkout -b <newbrach> origin/branch 将branch分支建立在远程分支之上(换名)
变基(分支整合)-1
$ git checkout <changeBranch>
$ git rebase <master> : 将changebranch分支上的修改全部移植到master分支上
$ git checkout <master>
$ git merge <changebranch> :合并
变基(分支整合)-2
$ git rebase onto <master> <change1> <change2>: 取出<change2>分支,找到<change1>与<chenge2>的共同祖先之后的修改,选中在2中但不在1中的修改,移植到<master>中
$ git checkout <master>
$ git merge <change2> :合并
将在 featureB 分支上合并的工作推送到服务器上的 featureBee 分支
通过指定本地分支加上冒号(:)加上远程分支给 git push 命令
$ git merge origin/featureBee
$ git push -u origin featureB:featureBee
提交到邮件-补丁应用
$ git format-patch -M origin/master:生成提交邮件信息
format-patch 命令打印出它创建的补丁文件名字。 -M 开关告诉 Git 查找重命名
$ git send-email *.patch : 发送补丁邮件
$ git apply /tmp/patch-ruby-client.patch : 应用补丁
$ git apply --check /tmp/patch-ruby-client.patch : 检查补丁
$ git am /tmp/patch-ruby-client.patch :应用补丁(推荐方式)
$ git am -3 /tmp/patch-ruby-client.patch :应用补丁,并以智能的方式(三方合并)解决冲突(推荐方式)
$ git am --resolved :解决补丁冲突后继续下一个补丁
比较
$ git diff <branch> : 将当前分支与<branch>分支进行比较
$ git diff <branch1> ... <branch2> : 将branch2 与 branch2和branch1 的共同祖先进行比较
拣选
$ git cherry-pick e43a6 : 将提交 e43a6 拉取到 master 分支
重用已记录的冲突解决方案
$ git config --global rerere.enabled true : 配置,记录历史冲突解决方案,一杯后续之用
生成快照归档
$ git archive master --prefix='project/' | gzip > `git describe master`.tar.gz
$ git archive master --prefix='project/' --format=zip > `git describe master`.tar.gz : 创建zip压缩包
SHA-1
$ git rev-parse develop : 分支名与版本号转换
查看
$ git show HEAD@{n} : 查看前n次的修改
$ git show develop@{yesterday} : 查看develop昨天所指向的分支
$ git show HEAD^ : 查看上一个父提交
$ git show HEAD^ : 查看第二父提交
$ git show HEAD~ : 查看第一父提交
$ git show HEAD~2 : 查看第一父提交的第一父提交
$ git show HEAD^^ : 查看第一父提交的第一父提交
交互式-指定暂存提交的修改
$ git add -i
搜索
$ git grep -n aaa : 搜索aaa,-n显示行号
$ git grep --count aaa: 搜索aaa,并且显示每个文件包含数量
$ git grep -p aaa: 搜索aaa,并展示在哪个方法里
$ git grep --head --break aaa: 搜索aaa,并格式化展示所在方法
$ git log -Saaa: -S 查看包含aaa内容文件引入的时候
$ git log -L :reject:AuditService.java : 查看AuditService.java中reject方法变更历史
修改提交
$ git commit --amend : 修改最近提交
$ git rebase -i HEAD~3 : 修改前3次提交,会产生变基
重置
$ git reset --soft 95ahdb3 : 重置到指定版本(实质是只改变HEAD指向的分支)
$ git reset --hard 95ahdb3 : 重置置顶版本,包括本地工作目录也会重置到上一次提交
$ git reset --mixed 95ahdb3: 将索引与版本重置(不重置本地目录)
冲突解决
$ git merge --abort : 退出合并
$ git merge -Xignore-space-change whitespace : 忽略任意数量空白冲突
$ git diff --ours -b : 查看合并文件与本地文件的区别
$ git checkout --conflict=merge file : 查看冲突详细(个版本明显区分)
$ git log --oneline --left-right HEAD...MERGE_HEAD:得到此次合并中包含的每一个分支的所有独立提交的列表
$ git diff : 在冲突状态下,会显示还有哪些文件处在冲突当中
撤销方案
$ git reset --hard HEAD~ : 将分支移动到前一个版本(或指定的版本)使本次无效
$ git revert -m 1 HEAD : 提交将会撤消一个已存 在提交的所有修改(撤销合并的提交,保留父节点的提交,再次合并时会丢失撤销的提交,解决方案是下个命令:git revert ^^M)
$ git revert ^^M : 撤销还原原始的合并(会把上次撤销的合并重新合并进来)