1.git 提交信息模板配置:http://blog.csdn.net/normallife/article/details/51764399
2.git 解决文件冲突、强制更新:http://blog.csdn.net/ccboy2009/article/details/50810694
3.常见的git 命令
(1)git log
(1.1)显示一行日志,包含commit id, message 描述,tag等
command: git log --pretty=oneline --abbrev-commit 或者git log --decorate --pretty=oneline
(1.2)查看最近n次的改动: git log n,最后一次:git log -1
(1.3)查看某个文件的提交改动:git log $filename (备注:本能查看文件夹的改动)
(1.4) git log --stat 显示commit历史,以及每次commit发生变更的文件
git show --oneline --stat $commitid 或者直接git show $commitid 查看改动
(1.5)git log 查看提交历史记录
(1.6)git log --oneline 或者 git log --pretty=oneline 以精简模式显示
(1.7) git log --graph 以图形模式显示
(1.8)git log --stat 显示文件更改列表
(1.9)git log --author='name' 显示某个作者的日志
(1.10)git log -p filepath 查看某个文件的详细修改
(1.11). git log -L start,end:filepath 查看某个文件某几行范围内的修改记录
(1.12)git log --stat commitId 或者 git show --stat commitId 查看某一次提交的文件修改列表
(1.13)git log branch1 ^branch2 比较两个分支的差异,分支branch1有的提交,但是在分支branch2没有
git log branch1 ..branch2 查看branch2比branch1分支多出来的提交,显示出来的是branch2比branch1多出来的提交
git log --left-right branch1...branch2 显示每个提交在哪个分支上,根据 --left-right配置,显示commit >是在branch2上的提交,commit> 是在分支branch1上的提交,比如git log --left-righ develop...master,显示如下:
第一个提交是在master上的,第二个提交是在develop上的
(2)git tag
(2.1)新建tag: git tag $tag_name
(2.2)删除远端tag: git push origin --delete $tag_name
(2.3)删除本地tag:git tag -d $tag_name
(2.4)多个tag按照提交时间排序:git tag --sort=committerdate
(3)git branch
(3.1)创建并切换到新建分支: git checkout -b $branch_name remotes/origin/master
推送新建的分支:git push origin $branch_name
(3.2)查看分支详细信息: git branch -av
(3.3)删除远端分支:git checkout remote_branch-name ; git push origin --delete $branch_name
(3.4)删除本地分支:git branch -D $branch_name
(4)git push
(4.1) 推送分支的提交经过gerrit:git push origin HEAD:refs/for/$work_banch
(4.2)推送分支的提交不经过gerrit: git push origin $work_branch
(4.3)推送新建的分支: git push origin $branch_name
(4.4)推送tag:git push origin $tag_name
(4.5)推送所有的tag: git push origin --tags
(5)git reset
(5.1)回退到执行的conmit_id: git reset $commit_id
(5.2)回退多次的修改,比如三次: git reset --hard HEAD~3
(5.3) git reset --soft与git reset --hard 的区别
git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;比如某次提交因为邮箱设置错误导致提交不上去,此时可以直接使用git reset --soft回退到前一个commit id,修改好邮箱,在执行git status 发现修改还在,直接使用git commit -s 就可以再次提交了。
git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉;所有的修改都会被丢掉,执行git status 显示没有改动,如下:
(6)git add
(6.1)追踪单个文件: git add $file_path/$file_name
(6.2)追踪所有改动: git add .
(7)git commit
(7.1)添加改动的描述信息:git commit -s
(7.2)修改提交信息描述: git commit --amend
针对gerrit来说,会生成新的change_id,如果找不到提交失败的原因,把已有的change_id 删掉试试,用该命令生成一个新的change_id
(8)git config
(8.1)设置全局用户名: git config --global user.name "helen"
(8.2)设置邮箱: git config --global user.email "helen@example"
(8.3)设置全局编译方式: git config --editor vim
(8.4)查看配置:git config --list
(9)git clone
(9.1)克隆代码(ssh):git clone ssh://gerrit@192.168.8.250:29418/test
(9.2)克隆代码(http):git clone http://gerrit@192.168.8.250:8088/a/test
(9.3)克隆代码with commit-msg hook:git clone ssh://gerrit@192.168.8.250:29418/android/standard/test && scp -p -P 29418 gerrit@192.168.8.250:hooks/commit-msg test/.git/hooks/
(10)查看.git/index的内容:git ls-files --stage
(11)git show $commitid 查看$commitid提交修改的内容
(12)tig 直观查看提交记录
不同平台的安装参考:https://blog.csdn.net/lcyaiym/article/details/77799813
(13)把分支A的commit_id 打到B分支上
git cherry-pick $commit_id
(13.1)在新的分支上执行,git cherry-pick $commit_id ,如果报错,那么然执行git status 查看冲突的文件,然后git add file,然后git commit -s ,然后git push
(13.2)批量cherry-pick:
- Git从1.7.2版本开始支持批量cherry-pick,就是一次可以cherry-pick一个区间的commit。
- git cherry-pick <start-commit-id>..<end-commit-id>
- git cherry-pick <start-commit-id>^..<end-commit-id>
前者表示把<start-commit-id>到<end-commit-id>之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;
后者有"^"标志的表示把<start-commit-id>到<end-commit-id>之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。
其中,<start-commit-id>到<end-commit-id>只需要commit-id的前6位即可,并且<start-commit-id>在时间上必须早于<end-commit-id>
[备注:git cherry-pick $commit_id来讲A分支的commit_id也放到B分支的前提是,这个commit_id必须在A分支本地有,不然会报错]
(14)基于某个commitid标记tag:
git tag -a <tag名> <commit对应的hash码>
(15)撤消未跟踪文件
git clean -dxf :清除所有未跟踪文件,包括纳入ignored的文件。如果要保留ignored的文件修改,使用参数-df
(16)合并多个提交
git rebase -i HEAD~2 ,合并两个提交,参考:https://www.cnblogs.com/tocy/p/git-rebase-merge-commit.html
(17)git merge 合并分支
git merge develop:表示merge develop分支到当前分支,如果提交时报错:have no new changes,可添加 --no-ff参数解决。
(18)git stash :保存变更
参考我的另一篇博客:https://www.cnblogs.com/zndxall/p/9586088.html
(19)比如develop分支落后于master分支,develop最新节点标记了tag_r1.0,develop合入master后,在master分支上执行git checkout tag_r1.0,就只能到看到这个tag之前的提交,master相对多出来的此时是找不到的。
(20)git diff
(20.1)比较两个分支的不同: git diff branch1 branch2
(20.2)比较本地分支和远程分支的不同: git diff branch1 remotes/origin/branch1
(20.3)比较两个提交之间的差异: git diff commit1 commit2
(20.4) diff branch1 branch2 文件名(带路径) //显示指定文件的详细差异
(20.5)git diff develop master --stat 两个分支的差异文件列表
(21)获取最后一次提交的commit_id
git rev-parse HEAD
获取前七位:git rev-parse --short HEAD