Git常用操作命令收集

  1. 远程仓库相关命令
检出仓库:$ git clone git://github.com/jquery/jquery.git
查看远程仓库:$ git remote -v
添加远程仓库:$ git remote add [name] [url]
删除远程仓库:$ git remote rm [name]
修改远程仓库:$ git remote set-url --push [name] [newUrl]
拉取远程仓库:$ git pull [remoteName] [localBranchName]
推送远程仓库:$ git push [remoteName] [localBranchName]
强制推送更改:$ git push --force origin master
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:
$ git push origin test:master // 提交本地test分支作为远程的master分支
$ git push origin test:test // 提交本地test分支作为远程的test分支
  1. 分支(branch)操作相关命令
查看本地分支:$ git branch
查看远程分支:$ git branch -r (如果还是看不到就先git fetch origin先)
创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支
切换分支:$ git checkout [name]
创建新分支并立即切换到新分支:$ git checkout -b [name]
直接检出远程分支:$ git checkout -b [name] [remoteName] (如:git checkout -b myNewBranch origin/dragon)
删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支
,可以使用-D选项合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并
合并最后的2个提交:$ git rebase -i HEAD~2 ---- 数字2按需修改即可(如果需提交到远端$ git push -f origin master 慎用!)
创建远程分支(本地分支push到远程):$ git push origin [name]
删除远程分支:$ git push origin :heads/[name] 或 $ git push origin :[name]
修改分支名称:git branch -m <old_branch_name> <new_branch_name>
创建空的分支:(执行命令之前记得先提交你当前分支的修改,否则会被强制删干净没得后悔)
$ git symbolic-ref HEAD refs/heads/[name]
$ rm .git/index
$ git clean -fdx
  1. 版本(tag)操作相关命令
查看版本:$ git tag
创建版本:$ git tag [name]
删除版本:$ git tag -d [name]
查看远程版本:$ git tag -r
创建远程版本(本地版本push到远程):$ git push origin [name]
删除远程版本:$ git push origin :refs/tags/[name]
合并远程仓库的tag到本地:$ git pull origin --tags
上传本地tag到远程仓库:$ git push origin --tags
创建带注释的tag:$ git tag -a [name] -m 'yourMessage'
  1. 子模块(submodule)相关操作命令
添加子模块:$ git submodule add [url] [path]
如:$ git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
初始化子模块:$ git submodule init ----只在首次检出仓库时运行一次就行
更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下
删除子模块:(分4步走哦)
1) $ git rm --cached [path]
2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
3) 编辑“ .git/config”文件,将子模块的相关配置节点删除掉
4) 手动删除子模块残留的目录
  1. 忽略一些文件、文件夹不提交
在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如
target
bin
*.db

具体参考gitignore文件屏蔽规则

  1. 后悔药
删除当前仓库内未受版本管理的文件:$ git clean -f
恢复仓库到上一次的提交状态:$ git reset --hard
回退所有内容到上一个版本:$ git reset HEAD^
回退a.py这个文件的版本到上一个版本:$ git reset HEAD^ a.py
回退到某个版本:$ git reset 057d
将本地的状态回退到和远程的一样:$ git reset –hard origin/master
向前回退到第3个版本:$ git reset –soft HEAD~3
修改最后的提交日志:$ git commit --amend
  1. Git一键推送多个远程仓库
编辑本地仓库的.git/config文件:
[remote "all"]
  url = git@github.com:dragon/test.git
  url = git@gitcafe.com:dragon/test.git
这样,使用git push all即可一键Push到多个远程仓库中。
  1. 缓存认证信息
$ git config credential.helper cache
  1. 查看提交日志
》查看文件中的每一行的作者、最新的变更提交和提交时间
$ git blame [fileName]
》查看仓库历史记录
有三个应该知道的选项。
--oneline - 压缩模式,在每个提交的旁边显示经过精简的提交哈希码和提交信息,以一行显示。
--graph - 图形模式,使用该选项会在输出的左边绘制一张基于文本格式的历史信息表示图。如果你查看的是单个分支的历史记录的话,该选项无效。
--all - 显示所有分支的历史记录
把这些选项组合起来之后如下:
使用 $ git log --oneline --graph --name-status 既可以看到简介的日志信息,也可以看到改了哪些文件,一举两得.
  1. 有选择的合并 - 这个功能最赞,没有之一
cherry-pick 可以从不同的分支中捡出一个单独的commit,并把它和你当前的分支合并。如果你以并行方式在处理两个或以上分支,你可能会发现
一个在全部分支中都有的bug。如果你在一个分支中解决了它,你可以使用cherry-pick命令把它commit到其它分支上去,而不会弄乱其他的文件或commit。
$ git cherry-pick [commitHash]
  1. Stash未提交的更改
正在修改某个bug或者某个特性,又突然被要求展示工作。而现在所做的工作还不足以提交,这个阶段还无法进行展示(不能回到更改之前)。在这种
情况下, git stash可以帮到忙了。stash在本质上会取走所有的变更并存储它们以备将来使用。
$ git stash
检查stash列表:$ git stash list
想解除stash并且恢复未提交的变更,就进行apply stash:$ git stash apply
如果只想留有余地进行apply stash,给apply添加特定的标识符:$ git stash apply stash@{0}
  1. 多次修改后拆分提交 - 暂存文件的部分改动
一般情况下,创建一个基于特性的提交是比较好的做法,意思是每次提交都必须代表一个新特性的产生或者是一个bug的修复。如果你修复了两个bug,或是添加了多个新特性但是却没有提交这些变化会怎样呢?在这种情况下,你可以把这些变化放在一次提交中。但更好的方法是把文件暂存(Stage)然后分别提交。
例如你对一个文件进行了多次修改并且想把他们分别提交。这种情况下,可以在 add 命令中加上 -p 参数
$ git add -p [fileName]
  1. 压缩多个Commit
用rebase命令把多个commit压缩成一个:
git rebase -i HEAD~[number_of_commits]
如果你想要压缩最后两个commit,你需要运行下列命令:
git rebase -i HEAD~2
Docs: [http://git-scm.com/book/en/v2/Git-Branching-Rebasing](http://git-scm.com/book/en/v2/Git-Branching-Rebasing)
  1. 差异查看
$ git diff --name-status HEAD~2 HEAD~3 <-- 获得两个版本间所有变更的文件列表
$ git diff HEAD HEAD~1 <-- 查看最近两个提交之间的差异
$ git diff HEAD HEAD~2 <-- 查看第1个与第3个提交之间的差异
^ - 代表父提交,^n 表示第n个父提交,^相当于^1 git寻根:^和~的区别 - 分析得很到位
~ - 代表连续的提交,~n相当于连续的第n个提交
$ git diff master..test <-- 比较两个分支之间的差异
$ git diff master...test <-- 比较master、test的共有父分支和 test 分支之间的差异
$ git diff test <-- 比较当前工作目录与 test 分支的差异
$ git diff HEAD <-- 比较当前工作目录与上次提交的差异
$ git diff HEAD -- ./lib <-- 比较当前工作目录下的lib目录与上次提交的差异
$ git diff --stat <-- 统计一下有哪些文件被改动,有多少行被改动
$ git diff --cached <-- 查看下次提交时要提交的内容(staged,添加到索引中)
  1. Git for Windows 中文乱码问题 (1.9.4-preview20140611)
》git log 显示的文件名乱码
执行 "git config –global core.quotepath false"可以解决之。core.quotepath设为false,就不会对0×80以上的字符进行quote,中文就
》ls命令显示的中文名乱码
改用"ls --show-control-chars"命令代替单纯的"ls"命令即可。
或者编辑.../Git/etc/git-completion.bash,新增一行 alias ls="ls –show-control-chars"

资料参考:

Git Submodule 的認識與正確使用!
如何保持在 Git Submodule 代码的开放和私有共存
Git Submodule Tutorial
删除 git submodule
pages.github.com
Git获取远程分支
Git for Windows Unicode Support
Git一键推送多个远程仓库
图解Git
使用git合并多个提交
git:多个commit合并提交
git rebase (本地分支合并) / git rebase (本地与远程同步)
git merge 和git rebase
版本控制系統 Git 精要
10 个很有用的高级 Git 命令
git修改历史提交
10 个迅速提升你 Git 水平的提示
git寻根:^和~的区别 - 分析得很到位
比较提交 - Git Diff

说明:Git for Windows 从 1.7.9 版本开始支持使用中文文件、文件夹名称了,结束了跨平台中文乱码的问题。

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

推荐阅读更多精彩内容

  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,632评论 9 163
  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,456评论 1 26
  • 每天乘地铁看到玻璃里的自己就觉得好欢喜,看到另外的自己,感觉立马觉得不是孤独的一个人在这个世界上了!原来有个跟...
    麦芽么么阅读 481评论 6 5
  • 暑假的时候,一个大二的学弟跟我说他的三门专业课挂掉了,得等到九月份开学的时候进行补考。他特别郁闷,想找我聊一聊。 ...
    花花世界213阅读 356评论 0 0
  • 什么是好声音?四个要素:你的声音清楚吗?说话稍纵即逝,如果你说话经常被要求重说,那基本上是这个问题。很多朋友是可以...
    声心合一阅读 574评论 0 0