目录
Git使用教程

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是 Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

Git安装

对于Linux或Unix系统,可通过apt-get install git指令安装。Mac或Windows用户可以选择在Git官网,选择相应的版本手动安装。

创建版本库与提交

版本库repository创建,可理解为一个目录。在本地可以选择合适的地方通过mkdir test创建一个空目录test。通过git init命令把这个目录变成Git可以管理的仓库:

1
2
$ git init
Initialized empty Git repository in /Users/bunmo/test/.git/

生成的.git目录是用来跟踪管理这个仓库,切勿删除。接着我们可以创建一个doc.txt,并在文件内编辑好内容,放在text目录下。
第一步,用命令git add告诉Git

1
$ git add doc.txt

第二步,用命令git commit告诉Git,把文件提交到仓库:

1
$ git commit -m "doc file"

其中-m后面为本次提交的说明,便于自己和他人阅读。commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

1
2
3
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

回退与修改

回退与恢复

当我们在不断修改doc.txt文件,时不时addcommit,可以通过git log命令查看每次修改的内容。
如果嫌输出信息太多,看得眼花缭乱的,可以试试git log --pretty=oneline
Githead表示当前版本,若想要回退到之前的某个版本,可以使用:

1
$ git reset --hard <commit id>

其中commit id为版本号,由一大串数字与字母组成。HEAD^表示上一个版本,HEAD^^表示上上一个版本。HEAD~50表示往上第50个版本。
Git提供了一个命令git reflog用来记录你的每一次命令,便于回退与恢复。

工作区与暂存区

工作区(Working Directory):就是你在电脑里能看到的目录,比如test文件夹就是一个工作区。
暂存区(Stage):用git add把文件添加进去,实际上就是把文件修改添加到暂存区。注意此时还没使用git commit
执行git commit就可以一次性把暂存区的所有修改提交到分支。
一旦执行git commit,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。git commit只负责把暂存区的修改提交,注意和git add的配合使用。

撤销与删除

内容修改

我们可以通过git status时刻查询版本状态。
命令git checkout -- doc.txt意思就是,把doc.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是doc.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是doc.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,git checkout -- filename.txt就是让这个文件回到最近一次git commitgit add时的状态。

倘若已添加到了暂存区时,想丢弃修改,可使用git reset HEAD <file>把暂存区的修改撤销掉重新放回工作区,再运用git checkout -- filename.txt命令撤销在工作区的修改。

总结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。

文件修改

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm filename.txt命令删了,这是Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了。
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit。此时,文件就从版本库中被删除了。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

1
$ git checkout -- doc.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

总之,命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

远程仓库

如果你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。
倘若在Github上新建一个名为testrerepository,可以通过

1
$ git remote add origin git@github.com:GitHubname/testre.git

将本地库与远程库关联,远程库的名字就是origin,这是Git默认的叫法。当然也可以将origin用其他名代替。
把本地库的所有内容推送到远程库上:

1
$ git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
之后每次的修改提交,可以不加-u参数:
$ git push origin master

远程克隆:

1
$ git clone git@github.com:GitHubname/testre.git
文章作者: Kylen Chan
文章链接: https://booku.ltd/posts/git/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kylen's Blog

评论