Git 教程

1 什么是 Git ?

Git 是一种开源的分布式版本控制系统(Distributed Version Control System),常用于大型项目的版本管理。

  1. 什么是版本控制系统?

    版本控制系统是用于管理文件不同版本的系统。一个项目(Project)可能有很多的版本(Version),也有很多的人在参与。在进行项目时,我们需要不停的更新版本,所以我们需要一个能够自动管理不同版本文件的系统,以方便我们进行回退,合并等操作。

  2. 什么是分布式?

    版本控制系统有三种形式:局部式、集中式、分布式。

    局部式:项目不同的版本在每个人自己电脑,可能导致不同人的版本差距较大,难以管理。

    集中式:项目不在本地保存,都提交到远程服务器上,以便进行统一地版本管理。但是一旦远程服务器崩坏就会导致所有版本丢失。

    分布式:结合了二者的优点,每个人在本地有自己的版本,提交到远程服务器后就有服务器的版本。二者之间版本并行,也可以通过 Git 进行同步。

下载地址 Git 文档 视频教程

2 Git 基本操作

第一次进入 Git 要做的事情–个人配置

git config --global user.name "yourname"
git config --global user.email "youremail"

在 Git 中,我们使用 git config 来配置 Git 的配置文件。

创建本地库

要创建本地库,请在一个未被 Git 管理的文件夹内依次输入已下指令。

  1. git init: 第一次创建本地库要做的事情,生成 .git 文件夹,使 Git 开始管理该文件夹。

  2. git add <file>: 使 Git 对文件开始进行管理。
    • 或者:git add .: 使 Git 对文件夹内所有文件开始进行管理。
  3. git commit -m "message": 生成本地版本并添加提交信息,不要忘记 -m 和引号 ""

以下是一些辅助指令:

  • git status: 检测当前文件夹内文件状态,红色代表未进行管理(新增文件或者修改原来的文件),绿色代表已进行管理。
  • git log : 查看本地版本记录。
  • git log --graph : 图形化有分支的查看本地版本。

    • git log --graph --pretty=format:"%h %s": 只显示哈希值和记录。

Git 三个区域

工作区

包含已经被 Git 管理的文件和未被 Git 管理的文件或修改的文件。Git 会自动检测文件是否被管理。

暂存区

git add 把工作区中未被 Git 管理的文件或修改的文件到提交暂存区。

版本库

git commit 把暂存区文件提交到版本库,生成本地版本。

版本回退

git reset --soft <version>: 把指定版本从版本库回退/前进到暂存区。

git reset HEAD: 把暂存文件从暂存区回退到工作区。

git checkout -- <file>: 把修改过的文件回退到上一个未修改版本的状态。

git reset --hard <version>: 把指定版本从版本库回退/前进到工作区。

git reflog: 查看本地操作记录和版本,通常在回退后找不到新版本时候使用。

:bulb: <version> 可以从 git log 中查看,是一串 40 位长度的 16 进制哈希值。当你需要制定某个版本时,你只需要指定版本号的前 4 - 8 位即可,通常版本号的前 4 - 8 位大部分时候不会有冲突。

以下的表格显示了从标题到左侧栏的 Git 操作。

  工作区 暂存区 版本库
工作区 git checkout git reset git reset --mix
暂存区 git add \ git reset --soft
版本库 \ git commit git reset --hard

3 Git 分支

git 每个版本只保留修改的记录(节省存储空间)。分支的存在使得一个版本可以产生多个新版本,添加新功能。最后再合并这些新功能。每一条分支是一个隔离的版本,分支间互不影响。

git branch: 查看现存分支。* 表示当前所在分支。

git branch <new branch>: 从当前分支新建分支。

git checkout <branch>: 切换到指定分支。

git checkout -b <branch>: 从当前分支新建并且切换到指定分支。

git merge <branch>: 把指定分支合并到当前分支。

  • 合并可能因为版本不同产生冲突,这个时候文件中会存在各个分支修改的记录,再手动确定所需的修改即可。确定后记得再生成最新版本。

git branch -d <branch>: 删除指定分支。

4 变基 rebase

该操作使得 Git 记录简洁。

合并版本操作

git rebase -i HEAD~<num>: 合并包括当前记录后 <num> 个版本。

git rebase -i <version>: 合并包括当前记录到指定版本之间的所有版本。

注意:合并版本操作不要包含已经推送到远程仓库的版本,会导致无法预料到的麻烦。

合并版本后会产生临时文件,选取版本并加上指令:s 代表压缩。随后再提交。

合并分支操作

  1. git checkout <branch1>: 切换到指定分支 1
  2. git rebase <branch2>: 把当前分支 1 合并到指定分支 2,与 git merge <branch> 相反。
  3. git checkout <branch2>: 切换到指定分支 2
  4. git merge <branch1>: 把指定分支 1 合并到当前分支 2
    • 如果产生冲突,解决完后用 git rebase --continue

合并拉取操作

git pull 操作无形之间产生了新的分支。为不产生新的分支,先进行 git fetch 操作拉取远端版本,再用 git rebase repository/branch 合并分支。

4 杂项

VSCode + Git 集成开发

VSCode 内集成了 Git,可以在 VSCode 中进行部分简单的 Git 操作。但是我们强烈建议你完全了解每一条 Git 指令的含义,熟悉命令行操作,以便更好地理解 Git 的工作原理。

官方文档 视频教程

暂存

git stash: 把工作区的修改暂存起来。

git stash show: 查看暂存的修改。

git stash pop: 恢复暂存的修改。

3 个配置文件

Git 配置级别主要有以下 3 类:

  1. 项目级别 local,对应 git config --local,配置文件为仓库所在的 .git 文件夹中的 config 文件,优先级最高。
  2. 用户级别 global,对应 git config --global,配置文件为 home/ 或者 C:/user/<name>/ 中的 .gitconfig 文件,优先级次之。
  3. 系统级别 system,对应 git config --system,配置文件为 etc/ 或者 <GIT>/etc/gitconfig 文件,优先级最低。

.gitignore

写在 .gitignore 文件中的文件名不会被 Git 管理。

  • file/:在该文件夹中的文件均会被忽略。
  • *.xx:以 .xx 结尾的文件会被忽略。
  • !x.xx:如果以 .xx 结尾的文件被忽略了,则 ! 使得 x.xx 被管理。
  • 甚至 .gitignore 本身也可以被 Git 忽略。

GitHub 在线编辑器教程
Relion_subtomo_averaging_code_review

相关文档