Git 命令个人总结

题外话:
       git命令真的很多,这里也只是列举了一些常用的,后边的注释很重要,耐心看会看到不同及规律。

热热身:
  1. 文件状态说明:新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。
  2. vi保存退出命令:i:进入insert模式;q:退出; w:保存; wq:保存退出; q!:不保存强制退出; 对了,在输入vi命令前,别忘了先输入英文冒号 ":" 。
长姿势:
  • git 查看/修改用户名、邮箱:

    1. 查看用户名和邮箱地址:
      git config user.name
      git config user.email

    2. 修改用户名和邮箱地址:
      git config --global user.name "username"
      git config --global user.email "email"

  • git 保存密码:

    1. 设置记住密码(默认15分钟):
      git config --global credential.helper cache

    2. 如果想自己设置时间,一个小时之后失效:
      git config credential.helper 'cache --timeout=3600'

    3. 长期存储密码:
      git config --global credential.helper store //长期存储密码

  • git 修改网络代理:

    git config --global http.proxy http://10.133.130.53:809
    git config --global https.proxy https://10.133.130.53:809
    git config --global http.proxy 'socks5://127.0.0.1:1070'
    git config --global https.proxy 'socks5://127.0.0.1:1070'

  • git 查看、取消代理:

    git git config http.proxy //或 git confighttps.proxy
    git config --global --unset http.proxy
    git config --global --unset https.proxy

  • git 创建SSH的RSA秘钥对:

    // 生成的两个非对称秘钥文件在C:\Users\Administrator.ssh
    ssh-keygen -t rsa –C “youremail@example.com

正餐来喽:

git init //在当前目录新建一个Git代码库,git init [project-name] 新建一个目录,将其初始化为Git代码库
git clone https://github.com/XXX/MyCs.git NewMyCs //NewMyCs是改写的本地仓库名
git add 多功能命令:可用于开始跟踪新文件,或把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态,且每次文件有改动后,都需要用其将文件放入暂存区,然后等待commit。
git status //查看哪些文件处于什么状态,git status -s 命令或 git status --short 紧凑的格式输出(只列出文件列表)
git diff //当前做的哪些更新还没有暂存,即还没有执行git add操作(详细列出代码)
git diff --staged //有哪些更新已经暂存起来准备下次提交(详细列出代码)
git diff HEAD //显示工作区与当前分支最新commit之间的差异
git commit -m "Story speed"
git commit -a -m 'new benchmarks' //-a作用:直接跳过使用暂存区域的git add操作步骤,简写方式-am
git commit -a --amend -m "xxx"//可实现在未push前,修改上次本地commit的代码及注释而不会产生新的Commit
git rm README.txt //移除某个文件,加--cached README是将其移除git跟踪或用:git reset HEAD <file>
git clean -df //从工作目录中移除没有track的文件
git mv README.md newName.md //文件改名
git log //只倒序打印提交日志,不展示提交代码
git log -p -2 //-p:用来显示每次提交的代码的差异, -2:仅显示最近两次提交
git log --stat -2 //查看到每次提交的简略的统计信息
git log -p -2 --since=2.day --author="XXX" --grep="two" //grep:打印日志信息中包含 "two"的
git log --since="2008-10-01" --before="2008-11-01"//或--after="2008-10-01" --until="2008-11-01"
git log --pretty=oneline //获取提交历史(包括提交编号和日志),简写git log --oneline
git log --pretty=raw //会显示出关于每次提交的更多信息,简写git log --raw
git log --skip=[skip] //指定跳过前几条日志
git log --follow "filePath" //显示某个文件的版本历史及文件改名,或用 git whatchanged "filePath",注意filePath要加单、双引号
git branch //列出所有本地分支
git branch -r //列出所有远程分支
git branch -a //列出所有本地分支和远程分支
git branch -v //查看本地所有分支及各分支最后一次提交内容
git branch -d [branchname] //删除本地某个分支,-d:表示非强制删除,-D:表示强制删除,换成-dr是删除远程分支
git branch -u origin/[branchname] //修改正在跟踪的上游分支
git branch [branch-name] //新建一个分支,但依然停留在当前分支
git branch [branch-name] [tagname/commit/branchName/originBranch] //从XXX中检出一个新分支
git branch (--track) [branch] [remote-branch] //新建一个分支,与指定的远程分支建立追踪关系,--track可省略
git branch --set-upstream [branch] [remote-branch] //对现有分支建立与远程分支的追踪关系
git checkout [branchname] //切换到某个本地现有分支上
git checkout -b [branchname] [tagname/commit/branchName] //通过标签等检出一个本地新的分支
git checkout --track -b [branchName] [origin/remoteBranch] //直接检出一个关联远程分支的本地分支,--track可省略
git checkout . //恢复上一个commit的所有文件到工作区,注意末尾有个点儿
git checkout -- filename //撤消对某文件的修改,注意-- filename二者中间有空格的(回到本地最后一次提交状态)
git checkout <commitID> <filename> //只撤销指定文件到指定commit时的版本,注意这里命令用的不是reset
git cherry-pick [commit] //选择一个commit(编号),合并进当前分支
git config --global alias.co checkout //为命令设置一个别名,使以后写命令方便
git merge branchName //将branchName分支合并到当前分支中
git remote -v //列出所有的远程仓库
git remote show [remote-name] //查看某一个远程仓库的更多信息
git remote add <shortname> <url> //添加远程仓库
git remote rename nameA NameB //远程仓库的重命名
git remote rm paul //远程仓库paul的移除
git remote set-url origin [url] //更换远程仓库地址
git remote rm origin //配合git remote add origin [url],也能实现更换远程仓库地址功能
git tag //列出标签
git tag -a v1.4 -m 'my version 1.4' //创建附注标签
git tag [tag] [commitId] //新建一个tag在指定commit
git show //查看标签信息与对应的提交信息;
git fetch [remote-name] //下载远程仓库的所有变动
git pull //从远程仓库中抓取与拉取,前提是有一个分支设置为跟踪一个远程分支
git push [remote-origin] [tag] //提交指定tag,git push [remote] --tags :提交所有tag
git push origin HEAD:[branch-name] //推送到远程仓库,推送分支与远程分支不同名时,origin HEAD:[branch-name]不可省略
git push --force //推送至远程仓库,远程分支与其同名时使用,--force 可简写 -f
git push [remote] --all //推送所有分支到远程仓库
git push origin --delete [branchname] //删除远程分支,或者git branch -dr [origin/branchname]
git rebase --continue/abort/skip //继续执行变基操作、终止变基、跳过某一文件继续进行
git rebase -i [startpoint] [endpoint] //合并多个commit为一个完整commit(注:该区间为前开后闭区间),endpoint默认为HEAD
git rebase -i HEAD~3 //合并后三个commit
git rebase [startpoint] [endpoint] --onto [yourBranch] //配以git checkout yourBranch和git reset --hard [newCommitId]实现将某段commit粘贴到另一个分支上
git reset [file] //将指定文件从"暂存区"中释放,使其处于unstage状态,但工作区代码不变
git reset [commit] //重置本地当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset --hard //重置暂存区与工作区,与上一次commit保持一致,效果与git checkout .类似
git reset --hard HEAD、BranchName、orign/branch//在合并有冲突时,放弃本地修改的,全部采用某个分支的
git reset --keep [commit] //重置本地当前HEAD为指定commit,但保持暂存区和工作区不变
git reset --hard HEAD^ //与git push origin master -f搭配,实现删除最后一次远程提交功能
git reset --hard [commit] //重置本地当前分支的HEAD为指定commit,同时重置暂存区和工作区,可用于版本回退
git revert [commit] //指版本回退到指定提交之前
git revert HEAD //与git push origin master搭配,实现删除最后一次远程提交功能

虽然看着有点儿多,但很多都是有规律的,你发现了吗 ?

多么痛的领悟:
  • git rebase :
    可对某一段线性提交历史进行编辑、删除、复制、粘贴,而且在每次手动处理完冲突后,都需要执行git add file和git rebase --continue 操作,但一定要注意,不要通过rebase对任何已提交到公共仓库中的commit进行修改(因:不管是git rebase <branch>还是git rebase <commitid>,都重置了提交的SHA-1校验,当你将本地变基后的提交推送到远端后,别人从服务器同步代码时,由于相同的内容却有不同的SHA-1校验值,因此会再此进行一次合并,于是就会有两个作者、commit信息完全相同的提交,但是SHA-1校验值不同,这无疑会带来麻烦)。

    git rebase -i 和 git rebase [startpoint] [endpoint] --onto 用法 可参考:
    https://www.jianshu.com/p/4a8f4af4e803

  • revert、reset两种版本回退命令比较 :

    1. 回退版本选点不同:若commit结点按日期顺序为 C>B>A,我们需要回退到B提交后的状态,此时,我们若是采用revert方式回退,那么我们选取的回退结点应该是C,而非B,而且出现冲突需要"手动"一个个处理,但若是采用reset方式回退版本,我们直接选中B结点即可。
    2. 保留提交记录不同:revert 会生成一次新的提交,需要填写提交注释,依然想保留该目标版本后面的版本,这种方式可以记录下这整个版本变动流程。而reset是将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。
    3. 其他开发伙伴操作:revert方式:他人正常pull代码即可;而reset方式:他人需要执行git reset --hard commitId,这里要注意commitId的选取。
  • 注意事项:
    在Git bash的控制台书写命令,需要我们注意加引号问题,如git log --follow "filePath",在Git bash控制台,我们需要给filePath明确的加上单引号或双引号,命令才能正常工作。而在cmd控制台中虽没有这个问题,但却有其他问题,如换行符默认是 ^ ,而不是\ ,这就导致我们在执行回退命令git reset --hard HEAD^ 时失效,会提示 "more?",意思是问你下一行是否需要再输入,而^ 符号就被当做换行符而被git命令忽略掉了, 解决方案如下:

    加引号:git reset –-hard “HEAD^” ;
    加一个^:git reset –-hard HEAD^^ ;
    换成~:git reset –hard HEAD~ 或者 git reset –hard HEAD~ 1(~ 后面的数字表示回退几次提交,默认是一次);

  • 此处常用快捷键:
    clear: 整理日志(cmd控制台用:cls);
    ctrl + k: 清空命令窗口中的所有日志;

查看git命令详情请跳转:

(英文): https://git-scm.com/docs
(中文): https://git-scm.com/book/zh/v2

其他:

GitLab的安装要求:http://www.cnblogs.com/gnool/p/6128546.html

gitLab使用介绍:http://www.tuicool.com/articles/mEbAZbE

快速安装 GitLab 并汉化:http://www.jianshu.com/p/7a0d6917e009?mType=Group

搭建git服务器:http://www.jianshu.com/p/ee8c379ef888

Git分支管理策略:http://www.ruanyifeng.com/blog/2012/07/git.html

gitlab的用户使用手册:http://www.tuicool.com/articles/bEz6Vf

好啦,先写到这里吧,其它的就交给聪明的你啦 !!!

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

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,465评论 1 26
  • 查看、添加、提交、删除、找回,重置修改文件 git help # 显示command的help git sho...
    Swiftor阅读 2,108评论 0 2
  • 1. GIT命令 git init在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个re...
    江边一蓑烟阅读 796评论 0 0
  • 配置 首先是配置帐号信息 ssh -T git@github.com#登陆github 修改项目中的个人信息 1 ...
    rochuan阅读 718评论 1 1
  • 满脑子都是答辩的不机智,就是需要成长。 怕老师带偏见改卷,人格奇特,考的说不考,希望没什么问题,项目明显也没有成功...
    Aestiva阅读 65评论 0 0