Git使用指南

流过昼夜 提交于 2019-11-27 02:00:42

Git使用指南

文本文件,可以体现内容的变化
二进制文件,只能体现文件大小的变化

创建版本库

设置git信息

  • 用户名

    • 命令 git config --global user.name “用户名”
  • 邮箱

    • 命令 git config --global user.email “电子邮箱”

建立仓库

  • 建立目录

  • 初始化仓库

    • 命令 git init

添加文件到版本库

  • 1、添加文件

    • 命令 git add [文件名]

      • 一次一个文件
  • 2、提交到版本库

    • 命令 git commit -m “提交的说明”

      • 提交说明内容要便于查看文件修改的情况"
      • 一次提交多个文件

版本管理

查看工作区状态

  • 命令 git status

查看文件被修改内容

  • 命令 git diff [文件名]

版本回退

  • 1、查看提交历史

    • 命令 git log -pretty=oneline
  • 2、查看命令历史

    • 命令 git reflog
  • 2、回退操作

    • 第一种命令 git reset --hard commit_id

      • commit_id 版本号前几位就可以,只要能找到就行
    • 第二种命令 git reset --hard HEAD^

      • HEAD指向的版本是当前版本

        • ┌────┐
          │HEAD│
          └────┘

          │ ○ append GPL
          │ │
          └──> ○ add distributed

          ○ wrote a readme file
      • HEAD^ 代表上一版本

      • HEAD~100 往上100个版本

工作区和暂存区

  • 工作区(Working Directory)

    • 就是电脑里的目录
  • 版本库(Repository)

    • 工作区里的隐藏目录(.git)

      • 暂存区(stage或index)
      • 自动创建的第一个分支master
      • HEAD指针,指向当前版本ID
  • 文件添加到版本库,分两步

    • 第一步:从工作区添加到暂存区

      • git add [文件名]
    • 第二步:从暂存区内容提交到当前分支

      • git commit -m “版本说明”

管理修改

  • Git管理的不是文件而是修改,比如添加字符或删除字符,添加一个文件等

  • 每次在工作区修改文件后,都必须先添加到暂存区后才能被提交到版本库的分支中

  • 查看工作区和版本库里的区别

    • 命令 git diff HEAD --[文件名]

撤销修改

  • 第一种,修改还未添加到暂存区

    • 命令 git checkout – [文件名]
    • 操作后,使工作区内容和版本库当前内容一致
    • 等于直接丢弃工作区修改
  • 第二种,修改已经添加到了暂存区

    • 命令 git reset HEAD <文件名>
    • 操作后,从暂存区删除该文件的修改,并且工作区恢复到,添加到暂存区时的状态
    • 等于回到了第一种状态,然后再按第一种的方式撤销工作区修改
  • 第三种,修改已经提交到了版本库

    • 命令 git reset --hard [版本ID]
    • 操作后,直接进行版本回退
    • 前提是没有推送到远程库,否则远程库的内容还是存在,无法回退

删除文件

  • 删除也是一个修改

    • 第一步:从工作区删除文件
    • 第二步:git rm [文件名] 或者 git add [文件名]
    • 第三部:git commit -m “版本说明”
  • 恢复删除的文件

    • 从版本库里恢复最新版的文件,但是提交后的对文件的修改无法被恢复

    • 未提交到版本库的文件删除后,无法被恢复

    • 命令 git checkout – [文件名]

      • 这条命令其实使用版本库的版本替换工作区的版本,无论是对工作区的修改还是删除都可以“一键恢复”
    • 或者 回退到其他版本 git reset --hard 版本号

远程仓库

GitHub

  • 生成SSH秘钥

    • 命令 ssh-keygen -t rsa -C “youremail@example.com”
    • 主目录的.ssh目录下有公钥和私钥
  • 登录GitHub添加秘钥

    • 公钥id_rsa.pub中的内容
    • 有多台电脑的话,都需要生成秘钥后添加
  • 免费版的GitHub内容所有人都能看到,除非交费才能作为私人仓库

  • 添加远程仓库

    • 添加远程仓库

      • 命令 git remote add origin git@github.com:bravew2016/learngit.git
    • 把本地仓库的变化连接到远程仓库主分支[新仓库不需要这一步]

      • 命令 git pull origin master
    • 第一次推送本地仓库的master分支的所有内容

      • 命令 git push -u origin master
    • 此后推送每次修改的内容

      • git push origin master
  • 克隆远程仓库

    • 命令 git clone git@github.com:bravew2016/learngit.git
    • GitHub支持https和SSH方式传输,SSH是支持原生的协议,速度最快
  • 分支管理

    • 创建分支

      • 命令 git branch <分支名>
    • 查看分支

      • 命令 git branch
    • 切换分支

      • 命令 git checkout <分支名> 或 git switch <分支名>
    • 合并分支

      • 合并某分支到当前分支

        • 命令 git merge <分支名>
    • 创建并切换分支

      • 命令 git checkout -b <分支名> 或 git switch -c <分支名>
    • 删除分支

      • 命令 git branch -d <分支名>
  • 解决冲突

    • 当要合并的分支和当前分支存在冲突内容时,职能合并无冲突的部分,有冲突的部分无法自动合并,需要手动修改为我们希望的内容,再提交

      • 查看冲突

        • 合并命令 git merge <分支名>
        • 命令 git status
        • Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
      • 修改有冲突的内容后

        • 执行提交

          • git add [冲突文件]
          • git commit -m “版本说明”
      • 删除要有冲突的分支

        • 命令 git branch -d <分支名>
    • 查看分支合并图

      • 命令 git log --graph --pretty=oneline --abbrev-commit
  • 分支管理策略

    • master应该很稳定,只用来发布新版本

    • 平时干活应该在dev分支上进行

    • 各人员在自己的分支上工作

    • 然后将成果合并到dev分支

    • 合并分支时,使用普通合并,不要使用快进模式

      • 命令 git merge --no-ff -m “合并生成新版本的名称” <被合并的分支名>
      • 这种方式合并,就算分支被删除了,也能从历史中看到合并时的提交,就可以知道做过哪些合并
  • Bug分支

    • 修复BUG时通常建立一个BUG分支

    • 若手动工作还没忙完,可以先暂存一下

      • 命令 git stash
    • BUG修复完后,再回到之前的工作现场

      • 命令 git stash pop

        • 这条命令会删除暂存区保存的工作现场
      • 或 git stash apply

        • 这条命令不会删除暂存区的工作现场
    • 查看暂存的工作现场列表

      • 命令 git stash list
    • 删除暂存的工作现场

      • 命令 git stash drop
    • 合并已修复的bug到当前分支,避免重复工作

      • 命令 git cherry-pick <已修复bug分支对应的提交点ID>
  • feature分支

    • 开发新功能需要新建一个分支

    • 如果要弃用并销毁,需要强行删除分支

      • 丢弃一个没有合并过的分支时需要强制删除
      • 命令 git branch -D <feature分支名>
  • 多人协作

    • 在本地创建和远程分支对应的分支,使用git checkout -b 分支名 origin/分支名,本地和远程分支的名称最好一致

    • 推送自己的修改

      • 命令 git push origin <分支名>
    • 推送失败,说明远程分支比本地新,需要将远程的分支合并到本地

      • 命令 git pull
    • 如果有冲突,需要先解决冲突,并在本地提交

      • 解决方法和本地的分支冲突一样
    • 冲突解决后,再推送到远程库分支

      • 命令 git push origin <分支名>
    • 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <分支名> origin/<分支名>。

  • Rebase

    • 多人在同一个分支上协作时,很容易出现冲突。即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功

      • 这样就会出现很多分叉的提交
    • rebase操作可以把本地未push的分叉提交历史整理成直线

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

    • 命令 git rebase

  • 标签

    • 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本

    • 标签的方式更加便于找到需要的提交

    • 创建标签

      • 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
      • 命令git tag -a -m “blablabla…” commit id 可以指定标签信息;
      • 命令git tag可以查看所有标签。
      • 命令git show 可以看到说明文字:
    • 标签管理

      • 命令git push origin 可以推送一个本地标签;
      • 命令git push origin --tags可以推送全部未推送过的本地标签;
      • 命令git tag -d 可以删除一个本地标签;
      • 命令git push origin :refs/tags/可以删除一个远程标签。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!