版本表示法


显示git分支


git rev-parse --symbolic --branches


git显示里程碑


git rev-parse --symbolic --tags


显示定义的所有引用


git rev-parse --symbolic --glob=refs/*


显示HEAD对应的SHA的哈希值


git rev-parse HEAD

git使用资料


git使用分支的场景


http://stormzhang.com/git/2014/01/29/git-flow/
http://nvie.com/posts/a-successful-git-branching-model/


git使用参考


https://github.com/geeeeeeeeek/git-recipes/wiki
https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-init

常用命令


git删除远程分支


# 一般先查看远程分支是否存在
git branch -a | grep remote_branch_name
git push origin :remote_branch_name
git branch -a | grep remote_branch_name


删除本地分支


git branch -D branchname


git创建本地分支并推送到远程新建一个分支


git branch local_branch_name
git checkout local_branch_name
git add files
git commit -m "working context for local branch name"
git push origin local_branch_name


git切换到远程分支


git branch remotes/origin/xxx
git checkout -b xxx


git设置不自动转换项目工程所在平台的换行符


git config --global core.autocrlf false
git config --global core.safecrlf true


git设置项目自动记住账户密码


git config --global credential.helper store


git将更新的文件回退(本地)


git log # 获取当前最新分支的hash值
git checkout commit_id -- file # 回退本地file文件的修改


git-merge合并操作


# 背景:当前的工作需要引入线上最新代码,则合并线上分支代码到当前分支下
git checkout feature
git merge master

or

git merge master feature


git-rebase合并操作


# 背景:会把整个 feature 分支移动到 master 分支的后面,有效地把所有 master 分支上新的提交并入过来。但是,rebase 为原分支上每一个提交创建一个新的提交,重写了项目历史,并且不会带来合并提交
# 将feature并入master分支
git checkout feature
git rebase master


交互式rebase操作


# 背景:被用于将 feature 分支并入 master 分支之前,清理混乱的历史
git checkout feature
git rebase -i master


Rebase 的黄金法则


# git rebase 的黄金法则便是,绝不要在公共的分支上使用它(不要在develop分支上使用rebase)
# 你运行 git rebase 之前,一定要问问你自己[有没有别人正在这个分支上工作]
# 将master分支移动到feature分支后面
git checkout master
git rebase feature # 确保master分支上没有人在进行工作

git push --force ## 如果没有使用--force,git会停止push


git-reset操作


# reset 将一个分支的末端指向另一个提交。这可以用来移除当前分支的一些提交
# 比如在一个热修复的分支提交了两次不必要的操作,想要撤回(仅限本地未提交到远程),下次 Git 执行垃圾回收的时候,这两个提交会被删除
git checkout hotfix
git reset HEAD~2

--soft – 缓存区和工作目录都不会被改变
--mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
--hard – 缓存区和工作目录都同步到你指定的提交


git-checkout操作


# 传入分支名时,可以切换到那个分支
git checkout branchname

# 还可以传入提交的引用来 checkout 到任意的提交
git checkout HEAD~2


git-revert操作(Revert 撤销一个提交的同时会创建一个新的提交)


# 找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中
git checkout hotfix
git revert HEAD~2

# git revert 可以用在公共分支上,git reset 应该用在私有分支上
# git revert 当作撤销已经提交的更改,而 git reset HEAD 用来撤销没有提交的更改

git使用日志查看提交历史


显示limit个提交


git log -n <limit>


将每个提交压缩到一行。当你需要查看项目历史的上层情况时这会很有用


git log --oneline


哪些文件被更改了,以及每个文件相对的增删行数


git log --stat


显示每个提交全部的差异


git log -p


搜索特定作者的提交, 可以是字符串或正则表达式


git log --author="<pattern>"


搜索提交信息匹配特定 的提交。 可以是字符串或正则表达式


git log --grep="<pattern>"


显示在 some-feature 分支而不在 master 分支的所有提交的概览


git log --oneline master..some-feature


git切换为远程分支


git fetch origin
git checkout -t origin/remote_branch_name


git 本地回滚


git checkout filename


git冲突


# 内容冲突
1. 相同文件相同区块下的内容存在差异则会出现冲突说明
2. 相同文件相同的区块无差异,相同文件不同区块存在增删代码,则会合并

# 树冲突
1. git提交的文件信息重命名或删除

# 逻辑冲突
git项目代码引入的文件名称被修改过