Git 操作大全【图解清晰】

一、Git命令行操作

1.1本地库初始化

进入文件夹
git init
注意:生成的 .git 目录中存放的是本地库相关文件,不要删除

1.2设置签名

  • 项目(仓库)级别仅在当前本地库有效

    git config user.name tom  #设置用户名tom
    git config user.email fu@qq.com #设置用户邮箱
    
  • 信息保存位置:.git/config 文件

  • 系统用户级别仅在当前登录的操作系统用户有效

    git config --global user.name tom
    git config --global user.email fu@qq.com
    

仅仅加了一个 --global

优先级别:项目级别 > 系统级别

就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名

如果只有系统用户级别的签名,就以系统用户级别的签名为准

二者都没有不允许的

  • 信息保存位置:~/.gitconfig 文件

1.3基本操作

1.3.1 状态查看

git status   #查看工作区、暂存区状态

1.3.2 添加

git add fileName  #指定文件
git add . #所有
说明:将工作区的文件添加到暂存区

1.3.3 提交

git commit -m 'commit message' fileName
说明:将暂存区内容提交到本地库

1.3.4 查看历史记录

git log 

git reflog  #常用
说明:HEAD@{移动到当前版本需要多少步}

git log --greph #图形显示,更直观

git log --pretty=oneline #漂亮一行显示

git log --oneline #简洁显示

多屏显示控制方式:
空格向下翻
b 向上翻
q 退出

1.3.5 前进后退

  • 基于索引值(推荐

    git reset --hard 指针位置
    例子:git reset --hard a6ace91 #回到这个状态
    
  • 使用 ^ 符号只能后退

    git reset --hard HEAD^
    例子:git reset --hard HEAD^^
    注意:几个 ^ 表示后退几步
    
  • 使用 ~ 符号只能后退

    git reset --hard HEAD~n
    例子:git reset --hard HEAD~3
    注: n 表示后退 n 步
    

1.3.6 reset的三个参数比较

soft: 
  - 仅本地库移动 HEAD 指针
mixed:
  - 在本地库移动 HEAD 指针
  - 重置暂存区
hard:
  - 在本地库移动 HEAD 指针
  - 重置暂存区
  - 重置工作区

1.3.7 删除文件并找回

  • 前提:删除前,文件存在的状态提交到了本地库
  • 相当于建立一个快照,虽然删除了,但只要添加到暂存区,就能找回
git reset --hard [指针位置]
删除操作已经提交到本地库:指针位置指向历史记录
删除操作尚未提交到本地库:指针位置指向 HEAD

1.3.8 文件差异比较

git diff [文件名]
将工作区中的文件和暂存区进行比较

git diff 哈希值 文件名  #和历史中的一个版本比较

git diff [本地库中历史版本][文件名]
将工作区中的文件和本地库里历史记录比较
不带文件名,比较多个文件

2.2 分支管理

hot_fix` `master` `feature_x` `feature_y

2.2.1 什么是分支管理

  • 在版本控制中,使用推进多个任务。

2.2.2 分支的好处

  • 同时并行推进多个功能开发,提高开发效率。
  • 各个分支在开发过程中,如果某一分支开发失败,不会对其它分支有任何影响。失败的分支重新开始即可。

2.2.3 分支操作

  • 创建分支
git branch 分支名
  • 查看分支
git branch
git branch -v  # 查看所有分支
  • 切换分支
git checkout 分支名
git checkout -b 分支名   #创建分支并直接切换到该分支
  • 合并分支相当于把修改了的文件拉过来

    第一步:切换到接受修改的分支上(被合并,增加新内容) git checkout [被合并的分支名]

    第二步:执行 merge 命令 git merge [有新内容的分支名]

git merge xxx
注意:合并分支的时候要明确谁谁合并
    我在a分支里面修改了。要合并到master,就先切换到master,然后合并b
  • 删除分支
git branch -d 分支名

2.2.4 解决冲突

  • 冲突的表现
  • 冲突的解决
    • 第一步:编辑,删除特殊标记<<< ===
    • 第二步:修改到满意位置,保存退出
    • 第三步:添加到缓存区 git add [文件名]
    • 第四步:提交到本地库git commit -m "日志信息" ``注意:后面一定不能带文件名

二、Git保存版本的机制

1.1 集中式版本控制工具的文件管理机制

以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。

1.2 Git的文件管理机制

Git把数据看作是小型文件系统的一组快照。每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改, Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以Gt的工作方式可以称之为快照流

1.3 Git 文件管理机制细节

  • Git的“提交对象”
  • 提交对象及其父对象形成的链条

三、Git分支管理机制

1.1 分支的创建

1.2 分支的切换

四、Git 结合Github

1.1 创建远程库地址别名

git remote -v  #查看远程地址别名
git remote add 别名 远程地址 
例子:git remote add origin https://xx

1.2 推送

开发修改完把本地库的文件推送到远程仓库
前提是提交到了本地库才可以推送
git push 别名 分支名
git push -u 别名 分支名    #-u指定默认主机
例子:git push origin master

1.3 克隆

完整的把远程库克隆到本地
克隆下来后不要在主分支里面做开发
clone进行一次,从无到有的过程,更新用pull
git clone [远程地址]
例子:git clone https://xx

clone之后的效果:

  1. 完整的把远程库克隆到本地
  2. 创建 origin 远程地址别名
  3. 初始化本地库

1.4 拉取

本地存在 clone 下来的文件 就用 pull 更新
pull = fetch(抓取) + merge(合并)
    git fetch [远程库地址别名] [远程分支名]
    git merge [远程库地址别名/远程分支名]
git pull [远程库地址别名] [远程分支名]

1.5 解决冲突

  • 要点:如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取pull。

  • 拉取下来后如果进入冲突状态,则按照 "分支冲突解决" 操作。

  • 注意:解决冲突后的提交是不能带文件名

1.6 rebase

提交记录简洁不分叉
没学懂,感觉有点鸡肋
混眼熟
git rebase -i 索引号
git rebase -i HEAD~3  #合并最近三条记录
说明:在vim编辑里面改成s

1.7 beyond compare

用软件解决冲突
1.安装 :
   beyond compare 
2.配置:
   git config --local merge.tool bc3  #合并名称
   git config --local mergetool.path '/usr/local/bin/bcomp' #软件路径
   git config --local mergetool.keepBackup false  #False不用保存备份
3.应用:
   git mergetool
说明:--local指只在当前操作系统有效

1.8 跨团队合作

  1. Fork

  2. 本地克隆clone修改,然后推送到远程库push

  3. Pull Request 请求

  4. Create pull request 发消息

  5. 两个人可以进行对话

  6. 代码审核review

  7. 合并代码

  8. 填写本次操作的日志信息

  9. 将远程库修改拉取到本地(结束)


  • 适用于个人

邀请成员:Settings --> Collaborators -->填写用户名 -->打开链接接受邀请

  • 企业 创建一个组织 方便管理

  • review

    组织做review 通过Pull request

  • 给开源社区共享代码

    点击别人仓库的 fork 到自己的仓库 -- > 然后 clone 下来 修改后推送到远程库 --> 点击Pull Request请求 --> Create pull request发消息

1.9 Tag标签

为了清晰的版本管理,公司一般不会直接使用 commit 提交
git tag -a v1.0 -m '版本介绍'   #创建本地 tag 信息
git tag -d v1.0         #删除 tag
git push origin --tags   #将本地 tag 信息推送到远程库
git pull origin --tags    #拉取到本地

git checkout v.10    #切换 tag
git clone -b v0.1 地址   #指定 tag下载代码

1.10 SSH 免密登录

  • 输入:ssh-keygen -t rsa -C GitHub邮箱地址
  • 进入.ssh目录,复制id_rsa.pub文件内容
  • 登录GitHub。Settings --> SSH and GPG keys--> New SSH Key
  • 回到git通过ssh地址创建。git remote add 别名 SSH地址

五、Git工作流

1.1 概念

  • 在项目开发过程中使用Git的方式

1.2 分类

1.2.1 集中式工作流
  • 像SVN一样,集中式工作流有一个中央仓库,所有的修改都提交到了Master分支上

  • 这种方式与SVN的只要区别就是开发人员有本地库。Git很多特性并没有用到。

1.2.2 GitFlow工作流 (重要)
  • 主干分支master 开发分支develop 修复分支hotfix 预发布分支release 功能分支feature

  • GitFlow 有独立的分支,让发布迭代过程更流畅。

1.2.3 Forking 工作流
  • 在 GitFlow 基础上, 充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。

  • 安全可靠地管理大团队的开发者

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