git最常用命令

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”

[cc lang=’c’]
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
[/cc]
3.2) 显示每次提交的内容差异
  git log -p -2
3.3) 做代码审查,显示简要的增改行数统计
  git log –stat
3.4) 简单显示每个提交所在的分支及其分化衍合情况图形
  git log –pretty=format:”%h %s” –graph
[cc lang=’c’]
-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格式
[/cc]
3.5) 指定日期显示log
  git log –since=2015-8-31
[cc lang=’c’]
-(n) 仅显示最近的 n 条提交
–since, –after 仅显示指定时间之后的提交
–until, –before 仅显示指定时间之前的提交
–author 仅显示指定作者相关的提交
–committer 仅显示指定提交者相关的提交
[/cc]
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地址
[cc lang=’c’]
// 例子:clone指定的develop分支
localhost:desktop apple$ git clone -b develop git@git.eqi.cc:mobile/zhece.git
[/cc]
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
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) 如何重命名远程分支名
[cc lang=’c’]
// 删除要重命名的远程分支
git push –delete origin oldBranchName
// 把本地分支重命名
git branch -m oldBranchName newBranchName
// 然后把它重新push远程就好
git push origin newBranchName
[/cc]
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
[cc lang=’c’]
// 在.git/config 加上
[branch “master”]
remote = origin
merge = refs/heads/master
rebase = true

// 也可以在 ~/.gitconfig 让所有的所有的 tracked branches都rebase
[branch]
autosetuprebase = always
[/cc]
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
[cc lang=’c’]
.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
[/cc]
7n63uyI - git最常用命令
继续优化 <git思维导图来着网上>


git-思维导图

gti/svn提交规范: AngularJS Git Commit Message Conventions