美文网首页
Git 常用操作

Git 常用操作

作者: wayyyy | 来源:发表于2019-04-07 18:25 被阅读0次
版本控制系统

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
[图片上传失败...(image-dffb10-1544337723992)]

  • 本地版本控制系统
    许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会加上备份时间以示区别,这么做唯一的好处就是简单,但是特别容易犯错。 为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异
本地版本控制系统.jpg
  • 集中化的版本控制系统
    接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。这类系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
集中化的版本控制系统.jpg

这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。但这样做的的缺点是如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

  • 分布式版本控制系统
    于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
分布式版本控制管理.jpg
Git 初始化配置

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

  1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。

2.~/.gitconfig~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。

3 .当前使用仓库的 Git 目录中的.git/config文件:针对该仓库。

每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

  • 用户信息
    当安装完 Git 应该做的第一件事就是设置用户名称与邮件地址,此后每一个 Git 的提交都会使用这些信息,不可更改。
    $ git config --global user.name "xxx"  # 设置用户名
    $ git config --global user.email xxxxxx  # 设置用户邮箱
    
  • 文本编辑器
    用户信息设置完毕,你可以配置默认文本编辑器了,当 Git 需要你输入信息时会调用它。 如果未配置,Git 会使用操作系统默认的文本编辑器,通常是 Vim。 如果你想使用不同的文本编辑器,例如 Emacs,可以这样做:
    # git config --global core.editor emacs
    
  • 检查配置信息
    如果想要检查你的配置,可以使用 git config --list 命令来列出所有 Git 当时能找到的配置。
    # git config --list
    user.name=John Doe
    user.email=johndoe@example.com
    color.status=auto
    color.branch=auto
    color.interactive=auto
    color.diff=auto
    ...
    
    你可能会看到重复的变量名,因为 Git 会从不同的文件中读取同一个配置(例如:/etc/gitconfig~/.gitconfig)。 这种情况下,Git 会使用它找到的每一个变量的最后一个配置。

可以通过输入 git config <key>: 来检查 Git 的某一项配置

 # git config user.name
Git三种状态

Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified,已暂存(staged)。

  1. 已提交表示数据已经安全的保存在本地数据库中。
  2. 已修改表示修改了文件,但还没保存到数据库中。
  3. 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
Git的三种状态.png

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’',不过一般说法还是叫暂存区域。

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。

  2. 暂存文件,将文件的快照放入暂存区域。

  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

获取 Git 仓库

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作"索引",不过一般说法还是叫暂存区域。

  • 在现有目录中初始化仓库
    如果你打算使用 Git 来对现有的项目进行管理,只需要进入该项目目录并输入

    $ git init
    

    该命令将创建一个名为.git的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件。但是这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。

  • 克隆现有的仓库
    如果你想获得一份已经存在了的 Git 仓库的拷贝,这时就要用到 git clone 命令。

    $ git clone https://github.com.....  # 从github上面获取项目
    

    当你执行git clone命令的时,远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。

提交
  • 查看文件状态
    Git 所跟踪的文件有三种状态:已提交(committed)、已修改(modified)和 已暂存(staged)。
    • 已提交表示数据已经安全的保存在仓库中。
    • 已修改表示修改了文件,但还没保存到仓库中。
    • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次的提交中。

如果 Git 目录中保存着的特定版本文件,就属于已提交状态。
如果作了修改并已放入暂存区域,就属于已暂存状态。
如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

  • 跟踪新文件

    $ git init
    $ echo "hello word" > txt
    $ git status
      Untracked files:    # 新文件未被跟踪
      (use "git add <file>..." to include in what will be committed)
     
      txt  
    $ git add txt
    $ git status
      Changes to be committed:  # 新文件已被跟踪,但还未被提交
      (use "git rm --cached <file>..." to unstage)
      
      new file:   txt  
    $ git commit -m "add txt"  # 提交
    $ git status
      On branch master
      nothing to commit, working directory clean  # 新文件已被提交到仓库中,现在工作目录是干净的。
    

    使用命令 git add开始跟踪一个文件。

  • 暂存已修改的文件

    $ echo "hello world2" >> txt
    $ git status
      On branch master
      Changes not staged for commit:  # 文件已被修改,但没有暂存
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
      
      modified:   txt  
    $ git add txt  # 文件已被暂存
    $ git status
      On branch master
      Changes to be committed:  # 文件已被暂存,但没有提交
      (use "git reset HEAD <file>..." to unstage)
     
      modified:   txt
    

    git add命令是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。

  • 提交

  • 移除文件
    要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,即使用git rm命令,然后再提交。

    另外一种情况是,我们想把文件从 Git 仓库中删除,但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 可以用git rm --cached命令

    $ git init
    $ echo "hello world" > txt
    $ git add txt && git commit -m "add txt"
    $ git status
      On branch master
      nothing to commit, working directory clean
    $ git rm --cached txt
    $ git status
      On branch master
      Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
      
      deleted:    txt
    
      Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
      txt
    $ git commit -m "remove txt from git"
    $ git status
      On branch master
      Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
      txt
    
  • 重命名
    不像其它的 VCS 系统,Git 并不显式跟踪文件移动操作。 如果在 Git 中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作。 不过 Git 非常聪明,它会推断出究竟发生了什么,至于具体是如何做到的,我们稍后再谈。

    $ git mv txt2 txt3
      On branch master
      Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
      renamed:    txt2 -> txt3
    

    其实,运行git mv 就相当于运行了下面三条命令:

    $ mv txt2 txt3
    $ git rm txt2
    $ git add txt3
    
查看提交历史

在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log 命令。

git log 有许多选项可以帮助你搜寻你所要找的提交,最常用的有:
-p,用来显示每次提交的内容差异。
-2 来仅显示最近两次提交:

撤销操作

在任何一个阶段,你都有可能想撤销某些操作。

  • 撤销对文件的修改
    如果你不想保留对文件的修改,你想将它还原成上次提交时的样子,可以使用git checkout命令。
    $ echo "hello world2" >> txt
    $ git status
      Changes not staged for commit:  # 修改还未加入暂存区
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
      modified:   txt
    $ git checkout HEAD txt
    $ git status
      On branch master
      nothing to commit, working directory clean
    
  • 撤销暂存的文件
    • 对于新增加跟踪的文件,撤销跟踪的文件可以用git rm --cached命令。

    • 对于修改类型的文件,撤销可以用git reset命令

      $ echo "hello world2" >> txt
      $ git add txt
      $ git status
        On branch master
        Changes to be committed:  # 已将修改加入暂存区
        (use "git reset HEAD <file>..." to unstage)
      
        modified:   txt
      $ git reset HEAD txt
      $ git status
        Changes not staged for commit:  # 修改还未加入暂存区
        (use "git add <file>..." to update what will be committed)
        (use "git checkout -- <file>..." to discard changes in working directory)
      
        modified:   txt
      
  • 撤销提交
    有时我们已经提交了修改,但此时发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行git commit --amend,重新提交。最终你只会有一个提交,第二次提交将代替第一次提交的结果。
    $ echo "hello world3" >> txt
    $ git add txt
    $ git commit -m "add hello world3"
    $ git status
      On branch master
      nothing to commit, working directory clean
    $ git commit --amend  # 重新提交
    $ git status
      On branch master
      Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
      
      modified:   txt
    

分支
  • 创建分支
  • 切换分支
  • 合并分支

参考资料

相关文章

  • 组件化(第一篇)

    组件化 git 常用操作指令 cocoapods的基本使用 cocoapods本地私有库 一、git 常用操作指令...

  • git的常用操作

    git的常用操作

  • GIt 操作补充

    常用的git操作命令 常用的git操作命令已经能够满足日常的工作需求 现补充一些高级命令 git branch -...

  • git使用整理

    git使用常用操作-常用基本命令 克隆:git clone 【url】 查看修改状态: git status (g...

  • GIT 版本管理 常用命令

    Git 常用命令流程图 Git常用操作命令: 初始化创建:$ git init //检出仓库:$ git clon...

  • 🍏常用 git 操作指北

    ? 常用 git 操作指南 ? git图形界面操作软件 ? 开发流程 git clone 拉取项目代码,不必多说 ...

  • git常用操作 🎀

    git常用操作 ? 基本知识 查看git信息 修改git配置 提交类操作 分支类操作 创建分支 查看分支 修改分支...

  • git常用操作命令

    git常用操作命令 1 git工作原理图 2 git远程操作 2.1 git clone 远程操作的第一步,通常是...

  • 真 git 操作大全 不会就看

    git 常用命令git 远程操作git 撤销操作 推酷git大全 react router4 中文文档 koa 简...

  • git常用操作

    git缩写配置: 在.gitconfig文件中添加: [alias] git常用操作: git clone 克隆一...

网友评论

      本文标题:Git 常用操作

      本文链接:https://www.haomeiwen.com/subject/oxxchqtx.html