0).git配置别名
比如: git show-graph
1 |
git config --global alias.show-graph 'log --graph --abbrev-commit --pretty=oneline' |
1)查看状态
git status
2) 查看工作区和暂存区的不同
wc filename
2_1) 命令可以查看工作区和版本库里面最新版本的区别
git diff HEAD — main.c
2.2)add -u 提交已经修改的信息
git add – u
2.3) add -A 提交刚添加的文件
git add -A
3) 查看log日志
git log
3.0) 查看最近几条
git log -5
3.1) 定制要显示的记录格式,便于后期提取分析
git log –pretty=format:”%h – %an, %ar : %s”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
%H 提交对象(commit)的完整哈希字串 %h 提交对象的简短哈希字串 %T 树对象(tree)的完整哈希字串 %t 树对象的简短哈希字串 %P 父对象(parent)的完整哈希字串 %p 父对象的简短哈希字串 %an 作者(author)的名字 %ae 作者的电子邮件地址 %ad 作者修订日期(可以用 -date= 选项定制格式) %ar 作者修订日期,按多久以前的方式显示 %cn 提交者(committer)的名字 %ce 提交者的电子邮件地址 %cd 提交日期 %cr 提交日期,按多久以前的方式显示 %s 提交说明 |
3.2) 显示每次提交的内容差异
git log -p -2
3.3) 做代码审查,显示简要的增改行数统计
git log –stat
3.4) 简单显示每个提交所在的分支及其分化衍合情况图形
git log –pretty=format:”%h %s” –graph
1 2 3 4 5 6 7 8 9 |
-p 按格式显示每个更新之间的差异 --stat 显示每次更新的文件修改统计信息 --shortstat 只显示 --stat 中最后的行数修改添加移除统计 --name-only 仅在提交信息后显示已修改 --name-status 显示新增、修改、删除 --abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符 --relative-date 显示简单相对时间("3 weeks ago") --graph 显示 ASCII 图形表示的分支合并历史 --pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format格式 |
3.5) 指定日期显示log
git log –since=2015-8-31
1 2 3 4 5 |
-(n) 仅显示最近的 n 条提交 --since, --after 仅显示指定时间之后的提交 --until, --before 仅显示指定时间之前的提交 --author 仅显示指定作者相关的提交 --committer 仅显示指定提交者相关的提交 |
4) log减少信息
git log –pretty=oneline
4.1)log减少信息(例:只显示最新3条)
git log –pretty=oneline -3
4.2)查看单个文件的修改历史(commit历史)
git log –pretty=oneline 文件名
4.3)根据commitID获得修改的内容(commitID改)
git show commitID
5) 查看commit ID
git log commitID
5.0) 查看分支合并图
git log –graph
5.1) 带参数的git log看分支合并情况
git log –graph –pretty=oneline –abbrev-commit
5.2) 查看远程origin信息
git remote show origin
6) 丢弃工作区修改(就是把版本库的文件替换到工作区的文件,没有add前,注: — 空格 file )
git checkout — file
6.1) 放弃当前文件修改的内容(如果放弃全部 git checkout .)
git checkout HomeVC.m
6.2) 放弃全部修改
git checkout .
7)把暂存区的修改撤销掉(unstage),重新放回工作区
git reset HEAD readme.txt
8) 撤销上次提交的版本 HEAD当前 HEAD^上次 可以一次类推
git reset –hard HEAD
9) 回退到特定的版本号 (版本回退或者版本还原都可以)
git reset –hard commitID
9.1)git回退单个文件到指定版本
git checkout commitID path
10) 显示每一次的操作命令
git reflog
11) 删除文件 在 1) add. 之后 2)把工作区删除了 3) 也要把版本库删除
git rm test.txt
12) 由于远程库是空的,我们第一次推送master分支时,加上了-u参数
git push -u origin master
13) git clone指定的分支
git clone -b branchName git地址
1 2 |
// 例子:clone指定的develop分支 localhost:desktop apple$ git clone -b develop git@git.shengshui:mobile/shengshui.git |
13.0) 查看当前分支
git branch
13.1) 查看本地分支所对应的远程分支(如:把本地分支重命名了,还没push远程,想知道现在他所对应的远程分支是谁)
git branch -vv
13.2)查看远程分支
git branch -a
13.3) 查看远程分支并带有版本号commit内容(例:*dev 2810228 热榜_性能优化)
git branch -av
14) 创建分支
git branch name
14.1)强推分支到远程
git push –force origin
14.2)查看分支来源log (基于哪个分支创建的?)
git relog –date=local | grep branchName
15) 切换分支
git checkout name
15.1) 获取远程分支(git clone到本地的时候,默认只有一个master分支,如果远程还有别的分支就可以用下面2个方法。git fetch是获取远程信息不会自动的merge)
方法一: git checkout origin/dev
git checkout dev
方法二: git fetch origin dev:dev
16) 创建+切换分支
git checkout -b name
17)合并分支到当前分支
git merge name
17.0) 重命名本地分支
git branch -m dev fet
17.1) 把重命名后的本地分支push服务器
git push origin fet
17.2) 如何重命名远程分支名
1 2 3 4 5 6 |
// 删除要重命名的远程分支 git push --delete origin oldBranchName // 把本地分支重命名 git branch -m oldBranchName newBranchName // 然后把它重新push远程就好 git push origin newBranchName |
17.3)git pull 提示 no tracking information信息(说明链接关系或本地没有创建)(git pull = git fetch + git merge)
git branch –set-upstream branch-name origin/branchName
17.4) 把远程的分支覆盖到本地的分支(如果本地的分支在远程没有的话,本地分支就会被删掉)
git fetch -p
17.5) 把远端的repo和本地repo合并(1.本地repo从上次pull后变更暂存起来 2.回复到上次pull时情况 3.用远端的变更 4.然后再用刚暂存本地的变更)
git pull –rebase
1 2 3 4 5 6 7 8 9 |
// 在.git/config 加上 [branch "master"] remote = origin merge = refs/heads/master rebase = true // 也可以在 ~/.gitconfig 让所有的所有的 tracked branches都rebase [branch] autosetuprebase = always |
18)删除分支(-D是强行删除)
git branch -d name
18.0) 删除远程分支(需要本地有此分支)
git push origin –delete dev
18.1) 强制删除远程分支(本地有无此分支都可以删除)
git branch -r -d origin/branchName
19) 同一分支版本号内容merge
// 创建两个版本的diff 注意顺序
a) git diff a34854y8 3094987 main.c
// diff 文件合并
b) git apply main.c
20) 在合并分支时,git会用Fast forward 模式,也就是在git branch -D的时候 会丢掉分支信息.这种情况还是要强制禁用这种形式,如果禁止git使用Fast forward 模式就会在merge的时候生成一个新的commit,这样可以随时查看找回
git merge —no-ff -m “log no-ff” dev
Tag
tag分为两种类型:轻量标签(lightweight)和附注标签(annotated)。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象
tag和branch区别:branch是征程的一条路,tag是路上的静态里程碑,
21) 获取当前分支tag列表
git tag
21.1) 创建tag
git tag v1.0 dev
21.2) 切换tag(*HEAD detached at ss1.0 就是临时的一个分支,切换后就不在了)
git checkout v1.0 dev
22) 给指定的commitID打tag
git tag v1.1 438934
23) 显示tag信息
git show v1.1
23.1) 搜索符合的tag(例:v2.1 v2.5等)
git tag -l ‘v2.*’
24) 创建带有说明的tag(推荐 a是annotated缩写)
git tag -a v1.2 -m “1.2版本上线了” 43434
24.1) 用PGP签名tag(s为signed缩写)
git tag -s v1.2 -m “1.2版本上线了” 43434
25) 把tag push到服务器(例:v2.3)
git push origin v2.3
25.1) 把本地所有tag一次性提交到git服务器
git push origin -tags
25.2)在指定的tag上打一个分支(v1.4是tag版本,feature1.4是分支名称)
git checkout v.14 -b featurev1.4
25.5)获取远程tag
git fetch origin tag v1.5
26) 删除远程tag方法一
git push origin —delete tag devtag
26.1) 删除远程tag方法二
git tag -d devtag
git push origin :refs/tags/devtag
暂存stash
28) 暂存(为什么要使用他呢? 解:在一种打死我都不想commit的情况下去切换别的分支,那就先暂存起来! 最常用)
git stash
29) 查看暂存区
git stash list
29.1)查看多个stash内容
git stash apply stash@{0}
30) 恢复暂存区方法一(没有删除stash内容)
git stash apply
31) 恢复暂存区方法二 (直接删除了stash内容 推荐)
git stash pop
32) 删除stash内容
git stash drop
33) 清空所有的stash
git stash clear
33) 获得远程库的信息
git remote
34) 获得远程库的详细信息(如果没有推送权限,就看不到地址)
git remote -v
34.1) 修改远程库的详细信息(方法一)
git remote set-url origin 新地址
34.2) 修改远程库的详细信息(方法二)
git remote rm origin
git remote add origin 新地址
34.3) 修改远程库的详细信息(方法三)
修改config文件
.gitignore
35) 添加不需要提交的文件(注意:xcode为例,如果checkout一个分支什么都没修改 直接再切回来,它傻傻的也要让你commit,这时就恼火了,解决办法 1)下面的命令 2)删除本地的 *.xcuserstate和提示的文件 3) 在你的远程项目中也要有.gitignore 和第一步一样操作(否则只能本地爽,pull一下就歇菜).gitignore来自:stack Overflow)
ls -a
vim .gitignore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
.DS_Store .Trashes DerivedData/ build/ xcuserdata/ *.pbxuser *.mode1v3 *.mode2v3 *.perspectivev3 *.xccheckout *.xcuserdatad *.moved-aside *.swp *.lock *~.nib !default.pbxuser !default.mode1v3 !default.mode2v3 !default.perspectivev3 #CocoaPods *.xcworkspace/ Pods/ fastlane/report.xml fastlane/screenshots |
gti/svn提交规范: AngularJS Git Commit Message Conventions