git 常用命令集合

1、gerrit 提交审核 git push origin HEAD:refs/for/master
2、不改变chang-id的情况下,修改上一次推送 git commit --amend
每个change-id对应一个review,可以手动修改chang-id提交覆盖上一版本的提交

3、以图形化方式显示版本合并历史 git log --graph --pretty=oneline --abbrev-commit
--- 用vscode配合Gitlens 插件能够更好地以图形化的方式显示提交历史等信息。

4、默认情况下合并分支后,如果被合并的分支被删除则不会保留分支的信息,可以在merge的时候加上 --no-off 参数禁用 Fast Forward。
例:
git merge --no-ff -m "merge log" dev

5、将代码回退到指定版本
git reset --hard xxxxxxxxxxxxxxxxxxxxxxxx

git diff xxxxx > patch
git apply patch

合并提交:
git rebase -i HEAD~2
更新到某个tag
git checkout -b new_branch tag

6、生成change-id
git rebase

7、
git log --graph --pretty=oneline --abbrev-commit

8、Git合并某个分支的一个cherry-pick到另一个分支
例如要将A分支的一个commit合并到B分支:
首先切换到A分支
git checkout A
git log
找出要合并的commit ID :
例如 0128660c08e325d410cb845616af355c0c19c6fe
然后切换到B分支上
git checkout B
git cherry-pick 0128660c08e325d410cb845616af355c0c19c6fe
然后就将A分支的某个commit合并到了B分支了

转移多个提交
Cherry pick 支持一次转移多个提交。
git cherry-pick <HashA> <HashB> 上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。 如果想要转移一系列的连续提交,可以使用下面的简便语法。 git cherry-pick A..B
上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。
注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。
$ git cherry-pick A^..B

9、从库里删除但是不物理删除
git rm --cached xxxx

10、更新并合并
git pull --rebase
原理:把本地当前分支的未推送 commit 临时保存为补丁 (patch)(这些补丁放到 .git/rebase 目录中),然后将远程分支的代码拉取到本地,最后把保存的这些补丁再应用到本地当前分支上。
若要把 rebase 当做 git pull 的预设值,可以修改 ~/.gitconfig 让所有 tracked branches 自动使用该设定:
[branch]
autosetuprebase = always

11、Windows下面使用git拉取或者提交项目时,遇到长路径提示file name too long的解决方案
可以使用以下命令来修复:
git config --system core.longpaths true

也可以仅设置当前项目:
git config core.longpaths true

查看设置状态:
git config core.longpaths

(git-cheatsheet_Page_2.png-26b069-1526711607289-0)

git-cheatsheet_Page_2.png

12、若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。
(Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的,但更好记些。)

13、Git Diff 的插件版本
可以使用 git diff 来分析文件差异。 但是,如果你喜欢通过图形化的方式或其它格式输出方式的话,可以使用 git difftool 命令来用 Araxis ,emerge 或 vimdiff 等软件输出 diff 分析结果。 使用 git difftool --tool-help 命令来看你的系统支持哪些 Git Diff 插件。

14、删除branch
git branch -d/D xxxxx

15、重命名本地branch
git branch -m xxxxxx

16、新建本地分支并推送到远程
git checkout -b test-branch
git push origin test-branch:test-branch
本地新建branch,推送到gerrit上:
确保推送的commit id 在库中可以找到,然后再在此基础上增加commit。

17、和远程库同步删除的tag
git fetch --prune --tags
向远程库推送tag
git push origin <nameOfYourTag>
删除本地库tag
git tag -d tag_name

18、
refs/changes/[CD]/[ABCD]/[EF]
Where:
[CD] is the last two digits of the change number
[ABCD] is the change number
[EF] is the patch set number

You can use the change reference to fetch its corresponding commit:

git fetch https://[GERRIT_SERVER_URL]/[PROJECT] refs/changes/[XX]/[YYYY]/[ZZ] \ && git checkout FETCH_HEAD

Your ref spec in repo can be read with: git ls-remote | grep $(git rev-parse HEAD).

19、git always says "Warning: Permanently added '...' (RSA) to the list of known hosts."
解决办法:create a ~/.ssh/config file and insert the line:

UserKnownHostsFile ~/.ssh/known_hosts

20、git add
Summary:

git add -A stages all changes

git add . stages new files and modifications, without deletions

git add -u stages modifications and deletions, without new files

21、git设置默认编辑为vim

If you want to set the editor only for Git, do either (you don’t need both):

  • Set core.editor in your Git config: git config --global core.editor "vim"
  • Set the GIT_EDITOR environment variable: export GIT_EDITOR=vim

22、sync delete tags with remote repo:
git fetch origin --prune --tags

push only the desired TAG:
git push origin <tag name>

23、推送特定的一个commit到远程库
git push <remotename> <commit SHA>:<remotebranchname> works. the trick is to combine it with git rebase -i to move the commit you want as the first commit, and specify that commit-sha.

24、git stash -p
交互式stash部分文件

25、解决冲突,应用某个版本:
从一个特定分支获取文件拷贝(比如说你在合并master和feature123两个分支):

git checkout master flash/foo.fla # 或者... git checkout feature132 flash/foo.fla
# 然后... git add flash/foo.fla

另一种方式是通过git输出文件 - 你可以输出到另外的文件名,然后当你决定了要用哪个后,再将选定的正确文件复制为正常的文件名:

git show feature132:flash/foo.fla > feature132-foo.fla # 检出master-foo.fla和feature132-foo.fla
# 假如说我们决定来自feature132的文件是正确的 mv feature132-foo.fla flash/foo.fla
$ git add flash/foo.fla

也可以用“git checkout —ours flash/foo.fla”和“git checkout —theirs flash/foo.fla”来检出特定版本的文件,而不用记住你在合并的分支名字。

26、git reflog --date=iso

27、git shortlog -sn 命令可以列出代码仓库的提交者统计

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343