最通俗易懂的git使用教程

*********************30min学会Git操作***********************

      • Git与SVN的区别分析
        • SVN的弊与利
        • Git的利与弊
      • Git基本流程图
        • git版本控制下的三个工程区域:
        • git版本控制下文件的三种状态:
      • Git相关操作流程
        • 1. 工程准备
        • 2. 新增、删除、移动文件到暂存区
        • 3. 查看差异及历史记录
        • 4. 在工作区增删改查及状态查询
        • 5. 提交代码
        • 6. 推送本地代码到远端
      • 分支管理
        • 1. 查看分支
        • 2. 新建分支
        • 3. 删除本地分支
        • 4. 切分支
        • 5. 更新本地代码
        • 6. 分支合并
        • 7. 撤销操作
      • 两种冲突处理办法
        • 1. 本地分支合并过程中的冲突处理
        • 2. 解决Merge Request冲突
      • THE END —— 一个彩蛋

Git与SVN的区别分析

SVN的弊与利

SVN 适用于局域网内的代码托管,如果跨局域网进行协同开发,效率会很低。
SVN也不适用与对代码有高质量追求及代码门禁看护

Git的利与弊

不适合Word等二进制文档的版本管理
整体的读授权,不能将授权精细到目录级别

Git基本流程图

最通俗易懂的git使用教程_第1张图片

git版本控制下的三个工程区域:

  • 版本库(repository) 在工作区中有一个隐藏目录.git,这个文件夹就是git的版本库,里面存放了git用来管理该工程的所有版本数据,也可以叫本地仓库。
  • 工作区(working directory) 日常工作的代码文件或文档所在的文件夹
  • 暂存区(stage) 一般存放在工程根目录.git/index文件中,暂存区亦可称为索引(index)

git版本控制下文件的三种状态:

  • 已提交(committed) 该文件已被安全的保存到本地数据库中
  • 已修改(modified) 修改了某个文件,但还没有提交
  • 已暂存(staged) 把已修改的文件放在下次提交时要保存的清单中

Git相关操作流程

1. 工程准备

  • git init 用于在本地目录下新建git项目仓库
  • git clone 用于克隆远端工程到本地磁盘
git clone [URL]
// 先判断项目git服务器是否已支持git-lfs,对二进制文件进行区别管理,否则克隆操作无法完整下载工程中的二进制文件。
git lfs clone [URL]   

2. 新增、删除、移动文件到暂存区

  • git add 用于在提交文件之前,把文件添加到暂存区
git add 文件名1 文件名2  // 添加文件1,文件2
git add .  // 添加当前目录下所有文件
  • git rm 将指定文件彻底从当前分支的缓存区删除,因此它从当前分支的下一个提交快照中被删除
  • git mv 命令用于移动文件,也可以用于重命名文件

3. 查看差异及历史记录

  • git diff 用于比较项目中两个版本(分支)的差异,也可以用来比较当前的索引和上次提交间的差异。
git diff branch_name origin/branch_name
git diff hashvalue_1 hashvalue_2  // 比较两次上库记录之间的差异(哈希值可以只输入前7位或8位即可)
  • git log 查看提交历史(退出用vi模式退出方法)
git log -n  // n 表示查询记录条数
git log --name-status  // 查看详细信息

4. 在工作区增删改查及状态查询

  • touch a.txt // 在本目录下创建空的a.txt文件
  • echo "cccc" >> a.txt // 在a.txt中添加内容
  • vi a.txt or vim a.txt // 修改a.txt文件
  • git status 命令用于显示工作目录和暂存区的状态

5. 提交代码

  • git commit 将暂存区文件改动提交到本地的版本库中
git commit file_name -m "commit message"  // message(m)
git commit -am "commit message"  // all message(am)
// 提交之后就可以查看历史记录
git commit --amend  // 修改上一次提交信息(进入vim模式)

6. 推送本地代码到远端

  • git push 将本地版本库的分支推送到远程服务器上对应的分支
git push origin branch_name  // 本地分支名和远端分支名相同    //origin是远端默认库名,可改
git push origin branch_name:new_branch_name  // 本地分支名和远端分支名不同(windows 上对代码分支名大小写不敏感)
git push origin branch_name --force  // 当远端分支较本地新时,强行推送到远端分支

分支管理

1. 查看分支

  • git branch 查看本地工程的所有git分支名称
  • git branch -r 查看远端服务器上有哪些分支 // remote(r)
  • git branch -a 查看远端服务器和本地工程的所有分支 // all(a)

2. 新建分支

  • git branch new_branch_name 新建分支后并不会切换到新分支
  • git checkout -b new_branch_name 新建分支后并切换到新分支 // branch(b)

3. 删除本地分支

  • git branch -d branch_name 删除本地分支(有时当事分支包含了未合并的改动,或者当事分支是当前所在分支,无法用-d删除)
  • git branch -D branch_name 强制删除本地分支

删除服务器上远程分支,二步:

  1. git branch -d -r branch_name // branch_name为本地分支名
  2. git push origin branch_name // 将删除推送远端

4. 切分支

  • git checkout branch_name 常用切分支方法
  • git checkout -f branch_name 强制切分支(有时候,当前分支工作区存在修改而未提交文件,与目的分支上的内容存在冲突,导致checkout切换失败,这时候可用)
    注:git checkout对象可以时分支,也可以时某个提交节点或者节点下的某个文件。

5. 更新本地代码

更新分支代码,与本地指定分支自动合并

  • git pull origin remote_branch:local_branch 更新远端代码到本地
  • git pull origin remote_branch 远程指定分支与本地指定分支相同

git fetch的作用是,从远端服务器获取某个分支的更新到本地仓库
注意:与 git pull不同的是,git fetch在获取到更新后,并不会进行合并操作,这样能给用户预留一个操作空间,确认git fetch内容符合预期后,在决定是否手动合并节点

  • git fetch origin remote_branch:local_branch 获取远端更新(分支名不同)
  • git fetch origin remote_branch 获取远端更新(分支名相同)

6. 分支合并

  • git merge branch_name 将指定分支合并到当前分支
  • git rebase branch_name 将指定分支合并到当前分支
git merger other_branch master  // 将其他分支合到主干

7. 撤销操作

说明:commit过就用reset,未commit就用checkout

  • git reset commit_id 用于撤销当前工作区中某些git add/commit操作,可以将工作区内容回退到历史提交节点(貌似只回退了历史节点没回退代码)
  • git reset --hard commit_id 强制回退历史节点及工作区代码
  • git checkout . 用于回退本地所有修改而未提交的文件内容
  • git checkout -file_name 仅回退某个文件的未提交改动
  • git checkout commit_id 将工作区代码回退(检出)到某个提交版本

两种冲突处理办法

1. 本地分支合并过程中的冲突处理

1. 在合并分支目录下 git status 查看冲突状况
2. vim conflict_file 解决冲突(vi下双击d可以删除当前行)
3. git add conflict_file
4. git commit -am "commit message"
5. git stauts

注: git reflog // 查看历史操作记录

2. 解决Merge Request冲突

法一:线上按照说明直接解决
法二:本地解决

 1. 下载个人fork库代码到本地
 2. pull下远端fork库代码,复现线上冲突现场
 3. 若是要增删文件,则增删文件
 4. 如果是要改文件,可用notepad++打开或是vim解决冲突部分
 5. git add conflict_file
 6. git commit
 7. git push
 8. 刷新Merge Request页面,冲突解决

THE END —— 一个彩蛋

如果还不了解怎么安装git,请看往期文章:
如何在window下安装及配置git
如何在linux或Ubuntu下安装git

如果你想深入了解Git,请看这篇文章:
Git进阶,动图展示

你可能感兴趣的:(git)