文章目录
-
-
-
-
0.git占位符
-
1.创建新分支
-
2.将本地新创建分支推送至服务器
-
3.放弃本地修改(对没有add或commit的修改,是不可恢复的,慎用)
-
4.合并dev分支到master
-
5.删除分支
-
6.查看已经commit但是没有push的记录
-
7.查看所有分支已经commit但是没有push的记录
-
7.显示最后一次的文件改变的具体内容
-
8.每次修改的文件列表
-
9.查看修改内容
-
10.重命名远程分支对应的本地分支
-
11.查看某次commit具体修改内容,查看某次commit中某个文件的修改内容
-
12.暂时保存不想add和commit的内容
-
13.查看现有的stash
-
14.重新应用缓存的stash
-
15.删除stash
-
16.将某个commit合并到其它分支
-
17.合并commit
-
18.修改commit message
-
19.终极恢复
-
20.新建tag
-
21.查看tag
-
22.同步tag到服务器
-
23.删除tag
-
24.切换到某个tag
-
25.查看好看的log,自定义log
-
26.查看某个文件的提交记录
-
27.查看某个文件每次提交的diff
-
28.查看本地分支与远程分支的映射关系
-
29.撤销本地分支与远程分支的映射关系
-
30.建立本地分支与远程分支的映射关系
-
31.将本地修改推送至远程分支
-
32.从某次commitId之前插入代码修改bug
-
33.clone某个分支,而不是整个仓库
-
-
-
0.git占位符
%H :提交哈希
%h :缩写提交哈希
%T :树形哈希
%t :缩写树哈希
%P :父哈希
%p :缩写为父哈希值
%和:作者姓名
%aN :作者姓名(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
%ae :作者电邮
%aE :作者电子邮件(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
%ad :作者日期(格式尊重 - 日期=选项)
%aD :作者日期,RFC2822风格
%ar :作者日期,相对
的%:作者日期,UNIX时间戳
%ai :作者日期,ISO 8601样格式
%aI :作者日期,严格的ISO 8601格式
%cn :提交者名称
%cN :提交者名称(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
%ce :提交者电子邮件
%cE :提交者电子邮件(尊重.mailmap,参见 git-shortlog [1] 或 git-blame [1] )
%cd :提交者日期(格式尊重 - 日期=选项)
%cD :提交者日期,RFC2822样式
%cr :提交者日期,相对
%ct :提交者日期,UNIX时间戳
%ci :提交者日期,类似ISO 8601的格式
%cI :提交者日期,严格的ISO 8601格式
%d :引用名称,如 git-log [1] 的—decorate选项
%D :没有“(”,“)”包装的引用名称。
%S :在达到提交的命令行上给出的引用名称(如git log --source),仅适用于git log
%e :编码
%s :受试者
%f :已清理的主题行,适用于文件名
%b :身体
%B :生体(未包裹的主体和身体)
%N :提交备注
%GG :来自GPG的签名提交的原始验证消息
%G? :显示好的(有效)签名“G”,坏签名显示“B”,有效期未知的好签名显示“U”,已过期的好签名显示“X”,“Y”代表由过期密钥签名的好签名,“R”表示由撤销密钥签名的好签名,“E”表示签名无法检查(例如缺少密钥),“N”表示没有签名
%GS :显示签名提交的签名者姓名
%GK :显示用于签署签名提交的密钥
%GF :显示用于签署签名提交的密钥的指纹
%GP :显示主键的指纹,其子键用于签名提交的签名
%gD :reflog选择器,例如refs/stash@{1}或refs/stash@{2 minutes ago};格式遵循-g选项描述的规则。 @之前的部分是命令行中给出的refname(因此git log -g refs/heads/master将产生refs/heads/master@{0})。
%gd :缩短了reflog选择器;与%gD相同,但refname部分缩短了人类的可读性(因此refs/heads/master变为master)。
%gn :reflog身份名称
%gN :reflog身份名称(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
%ge :reflog身份电子邮件
%gE :reflog身份邮件(尊重.mailmap,见 git-shortlog [1] 或 git-blame [1] )
%gs :reflog主题
%Cred :将颜色切换为红色
%Cgreen :将颜色切换为绿色
%Cblue :将颜色切换为蓝色
%Creset :重置颜色
%C(…):颜色规格,如 git-config [1] 的“CONFIGURATION FILE”部分中的值所述。默认情况下,仅在启用日志输出时显示颜色(通过color.diff,color.ui或--color,并且如果我们要去终端,则尊重前者的auto设置)。 %C(auto,...)被接受为默认的历史同义词(例如,%C(auto,red))。即使没有启用颜色,指定%C(always,...)也会显示颜色(尽管只考虑使用--color=always为整个输出启用颜色,包括这种格式和其他任何git可能颜色的颜色)。单独auto(即%C(auto))将打开下一个占位符的自动着色,直到再次切换颜色。
%m :左(<),右(>)或边界(-)标记
%n :换行符
%% :原始%
%x00 :从十六进制代码打印一个字节
%w([< w> [,< i1> [,< i2>]]]):切换行换行,类似 git-shortlog [1]的-w选项。
%<(< N> [,trunc | ltrunc | mtrunc]):使下一个占位符至少取N列,如果需要,在右边填充空格。如果输出长于N列,则可以选择在开头(ltrunc),中间(mtrunc)或结尾(trunc)截断。请注意,截断仅适用于N> = 2。
%< |(< N>):使下一个占位符至少占用第N列,如果需要,在右边填充空格
%>(< N>),%> |(< N>):与%相似,%< |(< N>),但左边的填充空格
%>(< N>),%> |(< N>):类似于%>(< N>分别是,%> |(< N>),除非下一个占位符占用的空间多于给定的空间并且左侧有空格,请使用这些空格
%><(< N>),%>< |(< N>):类似于%<(< N> ),%< |(< N>),但填充两侧(即文本居中)
%(预告片[:options]):显示 git-interpret-trailers [1] 解释的正文预告片。 trailers字符串后面可以跟冒号和零个或多个逗号分隔选项。如果给出了only选项,则省略拖车块中的非拖车线。如果给出unfold选项,则表现得就像给出了interpre-trailer的--unfold选项一样。例如,%(trailers:only,unfold)两者都做。
1.创建新分支
1.1从当前分支创建新分支
git checkout -b decard_feature_v3_ui_adjustment
1.2从远程分支创建新分支
git checkout -b localbranch origin/remotebranch
1.3从某个commitId创建新分支
git checkout commitId -b newbranchName
2.将本地新创建分支推送至服务器
git push --set-upstream origin decard_feature_v3_ui_adjustment
3.放弃本地修改(对没有add或commit的修改,是不可恢复的,慎用)
git reset --hard
4.合并dev分支到master
git checkout master
git merger dev
5.删除分支
//删除远程分支
git push origin --delete dev
//删除本地分支
git branch -d dev
//重命名本地分支
git branch -m oldBranchName newBranchName
6.查看已经commit但是没有push的记录
git cherry -v
7.查看所有分支已经commit但是没有push的记录
//查看尚未推送的所有分支上的所有提交
git log --branches --not --remotes
//查看所有分支上的未推送的最新提交以及分支名称
git log --branches --not --remotes --simplify-by-decoration --decorate --oneline --date=relative
//查看所有分支上的未推送的提交以及分支名称
git log --branches --not --remotes --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ci) %C(bold blue)<%an>%Creset' --abbrev-commit --date=iso8601-strict
//上面的命令太长,配置一个简写的命令,all-not-push
git config --global alias.anp "log --branches --not --remotes --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ci) %C(bold blue)<%an>%Creset' --abbrev-commit --date=iso8601-strict"
7.显示最后一次的文件改变的具体内容
git show
8.每次修改的文件列表
git whatchanged
git whatchanged --stat 以及文件修改的统计
//查看每次提交修改了哪些文件
git whatchanged --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ai) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
//命令太长,添加自定义命令
git config --global alias.whatched "whatchanged --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ai) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
9.查看修改内容
git diff
10.重命名远程分支对应的本地分支
git branch -m oldName newName
11.查看某次commit具体修改内容,查看某次commit中某个文件的修改内容
git show commitid
//filename,是项目中的全路径
git show commitId fileName
12.暂时保存不想add和commit的内容
git stash save "change message"//会缓存添加到暂存区的修改,Git跟踪的但并未添加到暂存区的修改,不会缓存在工作目录中新的文件(untracked files),被忽略的文件
使用-u或者--include-untracked可以stash untracked文件
使用-a或者--all命令可以stash当前目录下的所有修改
git stash save -u "change message"
13.查看现有的stash
git stash list
14.重新应用缓存的stash
git stash pop//将缓存堆栈中的第一个stash删除,并将修改应用到当前的工作目录下
git stash apply//缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝
15.删除stash
git stash drop stashname
16.将某个commit合并到其它分支
git cherry-pick [<options>] <commit-ish>...
常用options:
--quit 退出当前的chery-pick序列
--continue 继续当前的chery-pick序列
--abort 取消当前的chery-pick序列,恢复当前分支
-n, --no-commit 不自动提交
-e, --edit 编辑提交信息
这时如果要继续cherry-pick,则首先需要解决冲突,通过git add .将文件标记为已解决,然后可以使用git cherry-pick --continue命令,继续进行cherry-pick操作。
如果要中断这次cherry-pick,则使用git cherry-pick --quit,这种情况下当前分支中未冲突的内容状态将为modified
如果要取消这次cherry-pick,则使用git cherry-pick --abort,这种情况下当前分支恢复到cherry-pick前的状态,没有改变。
17.合并commit
git rebase -i [commitId] // 这里跟的 commitId是不会被干掉的。
git rebase -i HEAD~3 //从HEAD版本开始往过去数3个版本
pick b59c48c fix bug
pick 1a76bac test 3
# Rebase a665822..1a76bac onto a665822 (3 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
上面的界面,先列出当前分支最新的 2 个 commit (越下面越新)。每个 commit 前面有一个操作命令,默认是 pick ,表示该行 commit 被选中,要进行 rebase 操作。2 个 commit 的下面是一大堆注释,列出可以使用的命令。
squash 和 fixup 都可以用来合并 commit ,唯一的区别是 squash 会把 commit message 也合并,而 fixup 只会留下最新的一条 commit message, 现在我们先把需要合并的 commit 前面的动词,改成 fixup (或者 f),然后就是 :wq 保存吧。
保存完成之后,你有两个选择
git rebase --continue //确认 rebase
git rebase --abort //取消 rebase
18.修改commit message
修改最后一次commit message
# 修改最近提交的 commit 信息
$ git commit --amend --message="modify message by daodaotest" --author="jiangliheng <jiang_liheng@163.com>"
# 仅修改 message 信息
$ git commit --amend --message="modify message by daodaotest"
# 仅修改 author 信息
$ git commit --amend --author="jiangliheng <jiang_liheng@163.com>"
修改历史提交 commit 的信息
操作步骤:
git rebase -i 列出 commit 列表
找到需要修改的 commit 记录,把 pick 修改为 edit 或 e,:wq 保存退出
修改 commit 的具体信息git commit --amend,保存并继续下一条git rebase --continue,直到全部完成
中间也可跳过或退出git rebase (--skip | --abort)
19.终极恢复
无论是做了rebase,还是reset等操作,即使错了,也不要慌,可以恢复原样
#记录所有操作,前提是此操作不能太过久远,本地会删除一些较久远的操作记录
git reflog
20.新建tag
//在当前commit上打tag,不需要备注
git tag v1.0
//在当前commit上打tag,需要备注
git tag -a v1.0 -m "这是我打的tag"
//在指定commit上打tag
git tag -a v1.0 commitId -m "这是我在指定commitId上打的tag"
21.查看tag
//只能查看tag名
git tag
//可以查看tag名和注释
git tag -n
//查看tag详细信息
git show tagName
22.同步tag到服务器
//推送单个tag到服务端
git push origin v1.0
//推送所有tag
git push origin --tags
23.删除tag
//删除本地
git tag -d v1.0
//删除远端tag
git push origin :refs/tags/v1.0
24.切换到某个tag
git checkout v1.0
25.查看好看的log,自定义log
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
//命令太长,可以自定义命令为git lg,直接输入git lg就等价于上面很长的命令
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ci) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
26.查看某个文件的提交记录
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative filename
27.查看某个文件每次提交的diff
git log -p filename
28.查看本地分支与远程分支的映射关系
git branch -vv
29.撤销本地分支与远程分支的映射关系
git branch --unset-upstream
30.建立本地分支与远程分支的映射关系
git branch --set-upstream-to origin/addFile
31.将本地修改推送至远程分支
git pull --rebase //防止直接git pull 会产生很多不必要的merge记录
git push origin remotebranch
32.从某次commitId之前插入代码修改bug
1.我以前提交的代码出现了bug,所以要退回当初提交的commitId区修复bug
举个栗子,当前的git树
A---B---C---D---E
^
master
C节点出现了bug,我要退回C节点,修复bug,修复后的git树如下
A---B---C---C1---C2---D---E
^
master
操作如下:
1.在C节点切分支:git checkout cCommitId -b bugfix
2.在bugfix分支commit C1,C2
3.切换回master分支:git checkout master
4.利用变基参数:git rebase --onto bugfix cCommitId
5.此时可能会存在冲突,按照提示解决冲突,先git add conflictFiles,然后再git rebase --continue。千万不要在git add 后执行git commit 要不然 git树会分叉。
6.下图是解决后的git树,完美。
33.clone某个分支,而不是整个仓库
git clone -b branchName xxx.git
版权声明:本文为baidu_17508977原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。