Git使用简述

  1. 第一阶段[无分支操作]   
$ git init            初始化,开始管控文件夹
$ git status          查看当前文件夹状态
$ git add 文件名       对指定文件进行版本控制
$ git add .           对指定文件夹下的所有文件及子目录进行版本控制
$ git commit -m '提交详细的描述信息'           创建提交记录(版本)
$ git log             查看提交的记录
$ git reflog          查看所有的提交记录(包括回滚后)
$ git reset --hard 指定版本号         回滚至指定版本
git两区四状态

git提交与回滚流程
  1. 第二阶段[创建分支进行操作]

遇到问题:代码出现bug需要暂停现有工作,进入fix bug状态

方案A:stash

使用stash暂时保存正在进行的开发工作,回到上次提交状态下开始fix bug,处理完bug问题后,再从‘暂存区’拿回开发到一半的代码继续开发(弊端:fix bug后的代码可能会和开发到一半的代码有重合,造成代码冲突。冲突只能根据自己的需求逐一修正)

$ git stash      将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态(帮助我们暂时存储已经开发了一些的代码,回过头来继续做其他事情,做完之后,再拿回来继续开发)
$ git stash list   查看“某个地方”存储的所有记录
$ git stash clear  清空“某个地方”
$ git stash pop    将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
$ git stash apply  编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
$ git stash drop   编号,删除指定编号的记录

方案B:branch

git默认只有master一个分支,当多功能同时进行时,则可以创建不同的分支,来分别承担各个功能的开发工作。等到各个功能开发完毕后,进行分支合并,合并到master主干上来。但git merge 时也可能会出现冲突,解决冲突的方式上述stash相同

$ git branch 分支名称        创建分支
$ git checkout 分支名称      切换分支
$- git branch -m 分支名称     创建并切换到指定分支
$ git branch                查看所有分支
$ git branch -d 分支名称     删除分支
$ git merge 分支名称         将指定分支合并到当前分支
  1. 第三阶段[使用GitHub代码仓库托管]
    多设备同时开发时,可使用GitHub进行代码托管,在不同设备间进行代码同步
    1.创建GitHub并将代码推到GitHub上
$ git remote add origin https://github.com/用户名/项目名.git   为地址起一个别名origin
$ git push origin master              将本地master分支内容以及版本信息推送到GitHub
$ Username for 'https://github.com':  输入GitHub用户名
$ Password for 'https://用户名@github.com':    输入GitHub密码
$ git push origin dev    将本地dev分支内容以及版本信息推送到GitHub

2.在其他设备上进行代码clone操作(设备首次代码拉取)

$ git clone https://github.com/用户名/项目名.git    将项目从GitHub中获取(注意:clone操作默认只获取master分支)
$ git branch dev origin/dev    创建dev分支且和远程dev分支同步
$ git checkout dev    切换到dev分支,然后继续开发工作
$ git push origin dev    将本地dev分支开发的代码推到远程GitHub托管仓库的dev分支

3.在其他设备上进行代码pull操作(设备已有代码情况)

$ git checkout dev       确保在dev分支上
$ git pull origin dev    从远程GitHub仓库获取dev分支最新内容,并合并到本地

其中- git pull origin dev实际上可拆分为
git fetch origin dev     从GitHub仓库获取dev分支最新内容到版本库的分支
git merge origin/dev    将版本库的分支内容合并到工作区
这两个命令。但是merge会造成dev分支出现分叉,而使用
git rebase origin/dev    保持提交记录的整洁性,保证分支整齐

  1. 第四阶段[多人协作开发]
    在GitHub上多人协作开发的方式:

    1.添加合作者
    Collaborators

    2.创建组织(也可以为某一个单独的项目创建组织)
    organization

    多人协作开发可能会遇到的问题:
      先提交代码的人正常push提交代码到GitHub,后提交的人无法push代码

$ git push origin dev
To https://github.com/用户名/项目名.git
! [rejected] dev -> dev (fetch first)
error: failed to push some refs to 'https://github.com/用户名/项目名.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

  问题原因:GitHub上已经有其他人提交的新代码
  解决办法:从GitHub上获取最新代码并合并到本地,然后提交自己开发的功能(前提:各自开发的功能无重叠,则可先pull远程代码,然后直接push自己的代码;若pull代码后出现冲突,则处理完冲突,再push提交代码
  合并代码建议:1、一起合并;2、确定合并时间

  1. 补充:

5.1 为项目创建版本tag:

$ git tag -a V版本号 -m '版本介绍'      本地创建Tag
$ git show V版本号                     查看指定版本
$ git tags -n                          查看本地Tag
$ git tag -l 'V版本号.*'               查看本地Tag,模糊匹配
$ git tag -d V版本号                   删除指定Tag版本
$ git push origin :refs/tags/V版本号       更新远程tag
$ git checkout V版本号                 切换tag
$ git fetch origin tag V版本号
$ git push origin  --tags
$ git pull origin  --tags
$ git clone -b V版本号

5.2 Git的三个配置文件:

  • 系统配置: /private/etc/gitconfig
  • 用户配置: ~/.gitconfig
  • 项目配置:.git/config

5.3 用户凭证
  由于Git和Github交互操作可能会很频繁,那么一定少了用户授权的操作,为了防止每次操作重复输入用户名和密码,Git提供了两种解决方法:

秘钥

首先创建一对秘钥 ssh-keygen -t rsa,然后将 id_rsa.pub (公钥)内容拷贝到github中,日后操作无需再输入用户名和密码。
注意:这种方式需要使用Git中 git@github.com:用户名/项目名.git 格式地址。

密码

Https访问git时,避免每次操作需要输入用户名和密码,可以在配置文件中添加如下配置项:
   [credential]
   helper = store/cache/第三方
store:
   表示将用户名和密码保存在硬盘上
   第一次输入过用户名和密码之后,用户名和密码就会保存在当前用户根目录的 .git-credentials 文件中,内容格式为:https://用户名:密码@github.com
  自动添加配置命令:git config credential.helper store
cache:
  表示将用户名和密码保存在缓存中
  第一次输入过用户名和密码之后,用户名和密码就会保存在缓存中,默认超时时间是 900 秒,缓存相关文件保存在当前用户根目录的 git-credential-cache 中
  自动添加配置命令:
   git config credential.helper cache
   git config credential.helper 'cache --timeout=300'
相关操作:
  清除缓存:git credential-cache exit
  指定超时:
   [credential]
   helper = cache --timeout=300
注意:
  这种方式需要使用GIt中 https://github.com/用户名/项目名.git 格式地址。
  指定用户名和密码: https://用户名:密码@github.com/用户名/项目名.git

补充:
git branch -vv:  查看本地分支关联关系

git config --global user.name "Zzm":设置全局用户名
git config --global user.email "Zzm@foxmail.com": 设置全局邮箱

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

推荐阅读更多精彩内容

  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,645评论 9 163
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,500评论 0 13
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,655评论 4 54
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,907评论 0 11
  • 又睡过头了,错过了中午的瑜伽课程。只能上晚上的课程。 吃完饭后,下午1:30-3:00中阅读了《fooled by...
    Alice的梦幻之旅阅读 286评论 0 0