分支

git branch 查看所有分支
git branch v4.4 创建v4.4分支
git checkout v4.4 切换到v4.4分支

主干合并分支代码
git checkout master
git merge branch_name
主干合并分支某个commit代码
git checkout master
git cherry-pick commit_code

分支合并主干代码
git checkout branch_name
git merge master

获取远程分支
git checkout -b v2.0 origin/2.0

删除分支
git branch -d branch_name
删除远程分支
git push origin --delete branch_name
本地分支关联远程分支:
git branch --set-upstream-to=origin/newconfigcenter newconfigcenter

提交

git commit
git commit -m "提交注释"
重新提交
git commit --amend
增补提交
git commit -C head -a --amend

撤销回退

撤销commit
git reset --hard <commit_id>
撤销文件add
git reset HEAD <file>

reset命令有3种方式:
1:git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
2:git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
3:git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容

跟踪

取消对已纳入git版本管理的文件跟踪
注:该命令只能取消提交到暂存区之前的文件,可以先用git reset <文件名>将暂存区的文件回退到暂存区之前,然后再取消跟踪。或者使用git checkout恢复到git最近一个版本。
git update-index --assume-unchanged <取消跟踪的文件>
git update-index --no-assume-unchanged <撤销取消跟踪的文件>

FAQ

【FAQ】git merge 后 push 到 Gerrit 失败,提示 no new changes ?
需求:Git 分支合并
问题:使用 git merge 在本地执行分支合并操作,然后想 push 到 gerrit 上评审入库,可是在提交时,提示:
! [remote rejected] HEAD -> refs/for/dev (no new changes)
分析:no new changes 的意思,是说,这个合并,是个线性的合并。而合并的那些历史的 commit 节点,在 gerrit 上都已经评审过了,都是已有的 change 单,所以 gerrit 认为没有新的提交,就不让你提交评审。
方法1: 在 git merge 的时候,加上 --no-ff 参数,是为了让它生成一个新的 commit,这样就可以提交了~(不过生成的 gerrit change 是看不到改动信息的):git merge --no-ff v4.5  或者 git merge branch_name -m "分支合并"
方法2:不经过 gerrit,直接 push 入远程库。(不推荐)

【FAQ】$ gitdir=$(git rev-parse --git-dir); scp -p -P 12345 longchaoqun@smartgit:hooks/commit-msg ${gitdir}/hooks/    返回结果:Either -f or -t option should be set
解决:直接从服务器上下载http://smartgit/gerrit/tools/hooks/commit-msg, 把commit-msg文件放到.git/hooks目录吧

【FAQ】git pull之后,merge了最新一个commit版本,但是没有changeId。
解决:重新提交后再push。git commit --amend  ; git push