Git使用教程 gittutorial

该教程对该文章的翻译:https://git-scm.com/docs/gittutorial

本文介绍怎用使用 Git 导入新的工程、修改文件及如何其他人同步开发。

首先, 可以使用以下指令获取文档帮助

git help log

笔者注:不建议看这个文档,标准的语法介绍格式,很不友好

可以使用指令

git log --graph

查看提交过程

笔者注:不过也不建议使用,虽然优点GUI感觉,但毕竟是命令行输出。建议安装个GitKraken,才是真的方便。

在开始任何开发之前,建议线配置用户名和邮箱,例如

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

笔者注:这个配置是全局有效的,就是整台电脑都有效,配置保存在 ~/.gitconfig 文件里。上面的名字和邮箱就是注册Github/Gitee/Gitlab 的用户名和邮箱。

导入新的工程

先只考虑在本地进行开发,想要在代码开发过程中进行版本管理。有一个压缩文件 project.tar.gz,解压并且进行Git初始化

tar xzf project.tar.gz
cd project
git init

Git将会输出

Initialized empty Git repository in .git/

通过初始化,会产生一个文件夹 .git,git相关的东西会存在里面。

接下来,可以将当前路径下的所有文件(用 . 表示)进行暂存(原文用 take a snapshot,翻译成快照太别扭了)。

git add .

这个暂存操作会将文件暂时放在一个叫做索引表(Index)的地方。如果想要长久保存,那么就执行

git commit

笔者注:这个命令会打开编辑器,写入自己的Comit,实际上直接用 git commit -m "commit 内容" 更方便。

暂存(仅add)和提交(commit)的区别是什么呢?可以这样理解,比如写错了,要返回之前写的内容,要么返回到原始内容,要么返回add完毕的结果。但是如果commit了,可以直接跳到每一次commit的时候。

修改文件

如果修改了一些文件,就把它们加入到索引表中,

git add file1 file2 file3

add完毕,准备提交,可以使用 git diff --cached 来查看当前已add的东西与上一次commit后的差异

git diff --cached

如果不加参数 --cached,那么就是查看当前未add的东西与上一次commit后的差异了。git status 指令也可以查看当前的修改

git diff
git status

git add 的逆操作是 git restore

注:增删改 都是修改。
对于很多IDE,例如VScode,修改了的地方也会有标注,可以跟上述指令输出对比加深理解。

如果确定要提交,那么继续执行 git commit 即可。

也可以把 add 和 commit 合并成一条指令

git commit -a

不过一般都分开来。

查看提交历史

任何时候都可以使用以下指令查看修改

git log

如果想要很详细地比较每一步提交的差异,使用指令

git log -p

但是通常就是简单看以下每一步的修改,常用指令

git log --stat --summary

分支管理

一个Git仓库能够维护很多个分支,创建一个新的分支,例如 experimental,使用

git branch experimental

查看分支使用指令

git branch

就可以输出所有分支,例如

  experimental 
* master

experimental 是刚才创建的,而 master 是默认的分支。

master 上创建 experimental,两者是一致的,相当于只是别名,改一个另一个也跟着修改,直到commit后才会各走各的。

切换到experimental 分支使用

git switch experiment

现在修改一下文件,并且add和commit

git commit -a

现在如果执行指令 git switch master 切换到分支 master,就看不到自己的修改,因为修改是在 experimental 上进行的。如果切换到 experimental,又会重新看到修改。

master 分支上修改文件内容,并且commit(默认已经add),那么从此两个分支就是完全不一样的了,会产生分歧(diverge)。此时,就需要合并(merge)代码,将所有修改合并在一起。

例如,将 experimental 合并到 master,由于当前已经在 master 分支上,因此使用以下指令进行合并

git merge experimental

如果修改没有冲突(conflict),那么会自动完成合并。但是如果有冲突,就需要决策选择哪个分支的内容了。

没有冲突例如在 master 中将变量 a 从0改为1,在experiment 分支中将变量 b 从 0 改为2,那么合并后 a 为1,b为2。
有冲突例如 master 中将变量 a 从0改为1,在experiment 分支中将变量 a 从 0 改为2,那么两个分支修改不一致。

可以使用

git diff

查看冲突。然后在IDE(例如VScode)中选择要保留的内容解决冲突问题。例如:

Git使用教程 gittutorial_第1张图片

如果要取消合并,使用 git merge --abort,在commit前可以取消,commit后就直接回退版本吧。

现在 experimental 的内容已经合并过来了,可以删除该分支了。删除分支使用指令

git branch -d experimental

有时要强制删除一些分支,可以是使用指令

git branch -D experimental

使用Git合作开发

假设小明新建一个Git仓库 home/ming/project,小华也在根目录下克隆该仓库

hua$ git clone /home/hua/project myrepo

新仓库 myprepo 是对小明创建的仓库的复制版本。现在小华开始修改文件,并且提交。当小华完成自己所有开发时,就需要传给小明进行合并,小明的操作如下

ming$ cd /home/ming/project
ming$ git pull /home/hua/myrepo master

这实现将小华的代码合并到小明的 master 分支上。如果小明自己也做了修改,有冲突的话小明就得手动解决了。

pull 的功能有两个,一是从远程拉取(fetch)修改,二是与当前分支进行合并(merge)。

提交历史查看

你可能感兴趣的:(git)