git 命令整理

来源:互联网 发布:工业企业利润数据 编辑:程序博客网 时间:2024/05/20 07:51

配置目录:

.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 diffgit 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 : 撤销还原原始的合并(会把上次撤销的合并重新合并进来)
0 0