Git 命令简介

总结 Git 版本管理 - 命令

代码提交删除及版本回退

  1. git add readme.txt

    添加修改的文件,把文件修改添加到暂存区

  2. git commit -m "append GPL"

    提交修改的文件 -m后接提交log,是把暂存区的所有内容提交到当前分支
    如果不用git add到暂存区,那就不会加入到commit

  3. git loggit log --pretty=oneline

    查看历史记录

  4. HEAD

    当前版本,HEAD^上个版本,HEAD^^ 上上个版本,HEAD~100往上100个版本

  5. git reset --hard HEAD^

    回退到上一个版本

  6. git reset --hard 1094a

    回退到指定版本,1094a指定版本的ID

  7. git reflog

    记录每一次命令

  8. git diff HEAD -- 要查看的文件.m

    查看工作区和版本库里面最新版本的区别:

  9. git checkout -- 要修改的文件.xx

    可以丢弃工作区的修改,让这个文件回到最近一次git commitgit add时的状态
    要修改的文件.xx自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    要修改的文件.xx已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。前提是有被添加到版本库

  1. git reset HEAD 暂存区要撤销的文件.xx

    把暂存区的修改撤销掉(unstage),重新放回工作区
    执行完该命令后,暂存区是干净的,工作区有修改,如果需要丢弃工作区的修改,参考第9点

又到了小结时间。

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。
  1. rm test.txtgit rm

    在文件中删除或者命令删除时,需要从版本库中删除该文件,删除后需要提交git commit

远程仓库

  1. 创建SSH Key
    本地git仓库和github仓库之间的传输是通过ssh加密的,所以需要先创建SSH Hey,在用户主目录下查看有没有.ssh,如果有检查有没有id_rsaid_rsa.pub这两个文件,如果有了,则可以跳过,没有则创建

    ssh-keygen -t rsa -C "youremail@example.com"

  2. 登录GitHub,打开账号设置SSH Keys页面
    添加SSH Key,粘贴id_rsa.pub文件的内容

添加远程仓库

先有本地库,后有远程库,如何关联远程库

个人远端仓库 origin.png
  • 本地Git仓库、GitHub创建仓库,保持同步
  1. 登录GitHub

  2. 找到Create a new repo按钮,创建新仓库

  3. Repository name处填入仓库名称(方便后面使用用learngit代替),点击创建,成功的创建一个新的Git仓库

  4. learngit新建的仓库为空仓库,可以从改仓库克隆出新的仓库,也可把一个已有的本地仓库与之关联,然后把本地仓库的内容推送到GitHub仓库,在本地learngit仓库下运行命令

    git remote add origin git@github.com:youGitHubAccountName/learngit.git
    * 添加成功后远程库的名字就是origin

  5. 把本地库的所有内容推送到远程库上

    git push -u origin master
    * 把本地库的内容推送到远程,实际上是把当前分支master推送到远程,由于远程库是空的,在第一次推送master分支时加上-u参数,git会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来。
    > git push

  6. 推送成功后可以在GitHub页面中看到远程库的内容已经和本地一样了

  7. 本地更改提交

    git push origin master

  • 小结:

    • 关联一个远程库

    git remote add origin git@server-name:path/repo-name.git

    • 关联后第一次推送master分支的所有内容

    git push -u origin master

    • 每次本地提交后,推送最新修改

    git push origin master

从远程库克隆

先创建远程库,然后从远程库克隆

git与本地建立联系.png

  1. 登录GitHub,创建新仓库,名字叫(以实际项目名字命名)gitsKills
  2. 勾选initialize this repository with a README,会自动创建一个README.md文件
  3. 用命令克隆一个本地库git clone(确定本地仓库的路径在输入命令)

    git clone 创建的仓库地址.git

  • 小结
    需要先知道仓库地址,然后使用git clone命令克隆

分支管理

创建与合并

  1. 创建dev分支,然后切换到dev分支

    git checkout -b dev
    -b表示创建并切换相当于两条语句
    git branch dev
    git checkout dev

  2. git branch查看当前分支,当前分支前面会有一个*

  3. dev分支的工作完成即commit后,就可以切回master分支

    git checkout master

  4. dev上的工作成果合并到master分支上

    git merge dev
    用于合并指定分支到当前分支(经过第3步的操作后,该出即将dev合并到master上)

  5. 合并完成后删除dev分支

    git branch -d dev

  • 小结

    建议使用分支完成某个任务,合并后再删掉该分支

    • 查看分支:git branch
    • 创建分支:git branch branchName
    • 切换分支:git checkout branchName
    • 创建+切换分支:git checkout -b branchName
    • 合并某分支到当前分支:git merge branchName
    • 删除分支:git branch -d branchName

解决冲突

使用git status也可以告诉我们冲突的文件
找到对应的冲突文件后,手动解决冲突,
重新添加commit
git log --graph --pretty==oneline --abbrev-commit查看分支合并情况

分支管理策略

  • master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
  • 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

通常Git会用Fast forward模式,这种模式下删除分支,会丢掉分支信息。
如果强制禁用Fast forward模式,Git会在merge时生成一个新的commit,这样从分支历史上就可以看出分支信息。

  1. 创建并切换dev分支

    git checkout -b dev
    git add readme.txt
    git commit -m "add merge"

  2. 切回master

    git checkout master

  3. 准合并dev分支,--no-ff参数为禁用Fast forward

    git merge --no-ff -m "merge with no-ff" dev
    因为--no-ff会创建一个新的commit,所以加上-m参数,把commit描述写进去

  4. 合并后用git log查看分支历史

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

bug分支

stash,可以把当前工作现场储藏(暂存)起来,等以后恢复现场后继续工作

  • git stash 暂存工作区内容
  • git stash list 查看工作区的内容
  • git stash applygit stash drop 恢复工作去的内容并删除stash里的内容
  • git stash pop 恢复工作去的内容并删除stash的内容

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除,
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场

Feature分支

多功能开发
一个功能对应一个feature分支

  • git branch -d feature-vulcan 删除一个分支
  • git branch -D feature-vulcan 强行删除一个分支

多人协作

  • 推送分支,把该分支推送到远程仓库

    git push origin 要推送的分支名

  • master为主分支,因此要时刻远程同步

  • dev分支是开发分支,所以也需要与远程保存同步

  • bug分支只用于本地修复bug,就没必要推送到远程了

  • feature分支是否推送到远程取决与是否合作开发

抓取分支

  1. 先用git pull把最新的提交从origin/dev上抓取下来,然后在本地合并,解决冲突,在推送
  2. git pull失败,原因是没有指定本地dev分支与远程分支的链接根据提示可设置后再pull

    git branch --set-upstream-to=origin/dev dev

  • 多人协作的工作模式:
    1. 首先试图用git push origin branchName 推送自己的修改

    2. 推送失败,因为远程分支比你的本地更新,需要先git pull合并

    3. 合并如有冲突则解决冲突,并在本地提交

    4. 在用git push origin branchName推送

    5. 本地分支和远程分支创建链接关系

      git branch --set-upstream-to branchName origin/branchName

Rebase

变基
rebase操作可以把本地未push的分叉提交历史整理成直线;

rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

标签管理

创建标签:

  • git branch 切到需要打标签的分支上
  • git tag v1.0 打一个新的标签
  • git tag 查看所有标签 标签是按字母排序的,不是按时间顺序列出的
  • git log --pretty=oneline --abbrev-commit 查找commit id
  • git tag v0.9 commit id 指定提交的地方打标签
  • git tag show v0.9 查看标签信息
  • git tag -a v0.1 -m “version 0.1 released” 1094adb-a指定标签名,-m指定说明文字
  • git tag -d v0.1 删除本地标签
  • git push origin <tagname> 推送到远端
  • git push origin --tags 推送全部标签到远端
  • git push origin :refs/tags/v0.9,删除远程标签,已经推送到远端的删除需要先删除本地的标签,然后在删除远端的

常用命令

  • git push origin branch-name 从本地推送分支,使用

  • git pull抓取远程的新提交

  • git checkout -b branch-name origin/branch-name建立本地分支和本地远程分支的关联

  • git branch --set-upstream branch-name origin/branch-name 本地分支和远程分支创建链接关系

  • git remote -v 显示本地所有的远程仓库地址

  • git remote remove origin/upstream 删除本地代码与远端GitLab分支之间的关系

  • git remote add origin git@gitlab.go-goal.cn:albert/xxx-bottom.git 本地代码与新的GitLab服务器关联起来

  • git remote add upstream git@gitlab.go-goal.cn:albert/xxx-bottom.git 本地代码与新的GitLab服务器关联起来

  • git pull 线上线下分支同步

  • git pull upstream 线上线下分支同步

  • git push origin --all 将本地的所有分支都推送到新的GitLab服务器远程分支

  • git stash 暂存工作区内容

  • git stash list 查看工作区的内容

  • git stash applygit stash drop 恢复工作去的内容并删除stash里的内容

  • git stash pop 恢复工作去的内容并删除stash的内容

  • git log --graph --pretty==oneline --abbrev-commit

    查看分支合并情况

  • git status

    查看当前仓库的状态

  • git diff

    查看difference修改内容

  • git add 、git commit

    添加需要提交的文件,然后commit

  1. mkdir learngit 创建一个空目录

  2. cd learngit 切换到该目录下

  3. pwd 查看该目录路径

  4. git init

  5. ls -ah 查看.git的目录,.git用来跟踪管理版本库的

  6. cat ~/.ssh/id_rsa.pub 查看ssh是否是自己的(与git管理台自己账户设置中对应)

  7. 移除之前的仓库对应关系

    git remote remove origin
    git remote remove upstream

  8. 创建新的自己的仓库,在建立主仓库upstream

    git remote add origin 地址xxx
    git remote add upstream http://远端地址.git (输入要要远程连接的主仓库)

  9. 再拉取本地仓库的分支和upstream分支

    git pull upstream

多需求开发时,有未完成的任务,又需要切换分支的情况:
先暂存,然后切换分支,处理完后切回,然后找回暂存内容,继续开发

  • git stash 暂存工作区内容
  • git stash list 查看工作区的内容
  • git stash applygit stash drop 恢复工作去的内容并删除stash里的内容
  • git stash pop 恢复工作去的内容并删除stash的内容

参考:Git教程
https://www.liaoxuefeng.com/wiki/896043488029600/896954848507552

Git Document
https://git-scm.com/book/zh/v2

Git cheat sheet
https://gitee.com/liaoxuefeng/learn-java/raw/master/teach/git-cheatsheet.pdf

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

推荐阅读更多精彩内容

  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 3,937评论 3 27
  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 1,920评论 1 8
  • 创建版本库 通过git init命令把这个目录变成Git可以管理的仓库 把文件添加到版本库 git add把文件提...
    九命丿相柳阅读 135评论 0 0
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,381评论 0 7
  • 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集...
    Splendid飞羽阅读 312评论 0 0