初学GIT笔记[Part 1]

150 阅读5分钟

来源于廖雪峰Git教程 www.liaoxuefeng.com

安装Git

检测系统有没有安装Git

$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

创建版本库

首先创建一个空目录:

$ mkdir learngit
$ cd learngit
$ pwd

pwd命令用于显示当前目录。

然后,通过git init命令把这个目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in /Users/Keith/learngit/.git/

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。

git中vi的使用

vi & vim 有两种工作模式:

1.命令模式:接受、执行 vi操作命令的模式,打开文件后的默认模式;

2.编辑模式:对打开的文件内容进行 增、删、改 操作的模式;

创建、打开文件:$ vi [filename]:

1.使用 vi 加 文件路径(或文件名)的模式打开文件,如果文件存在则打开现有文件,如果文件不存在则新建文件,并在终端最下面一行显示打开的是一个新文件。

2.键盘输入字母iInsert键进入最常用的插入编辑模式。

保存文件:

1.在插入编辑模式下编辑文件。

2.按下ESC键,退出编辑模式,切换到命令模式。

3.在命令模式下键入ZZ或者:wq保存修改并且退出 vi。

4.如果只想保存文件,则键入:w,回车后底行会提示写入操作结果,并保持停留在命令模式。

放弃所有文件修改:

1.放弃所有文件修改:按下ESC键进入命令模式,键入:q!回车后放弃修改并退出vi。

2.放弃所有文件修改,但不退出vi,即回退到文件打开后最后一次保存操作的状态,继续进行文件操作:按下ESC键进入命令模式,键入:e!,回车后回到命令模式。

作者:zym18351887819 来源:CSDN 原文:blog.csdn.net/zym18351887…

把一个文件放到Git仓库

第一步,用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

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

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

git reset

用reset方法可以把已经加入到git add但还没commit的文件unstage回去

$ git reset HEAD <file>

也可以回退到各个版本中去

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

综上,git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

cat

查看文件内容

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.

git status

要随时掌握工作区的状态,使用git status命令。

git diff

如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

git diff 是只比较比较工作区和暂存区(最后一次add)的区别,git diff --cached 是只比较暂存区和版本库的区别,git diff HEAD -- filename 是只比较工作区和版本库(最后一次commit)的区别。三种比较各对应不同命令的

git log

在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

git log命令显示从最近到最远的提交日志。

$ git log -- pretty=oneline合并每条记录到一行

回退版本

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(每个提交的ID都不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

git reflog

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

git checkout -- file

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

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

然而,从来没有被添加到版本库就被删除的文件,是无法恢复的!

git checkout HEAD file

运用git checkout HEAD <file> 可以一步到位撤销了工作区的修改,也撤销了暂存区的修改。

git reset --hard HEAD

运用git reset --hard HEAD 可以一步到位撤销了工作区的修改,也撤销了暂存区的修改, 亦直接退回上一个commit

rm

可以直接删除工具库 working repository 的文件

git rm

类似于 git add,把整个操作提交到暂存库,然后通过git commit操作把版本库的文件删除。

远程仓库

创建SSH key

$ ssh-keygen -t rsa -C "youremail@example.com"

然后在GitHub的setting里设置new SSH Key 把id_rsa.pub的内容添加进去。

关联GitHub远程仓库

git remote add origin git@server-name:path/repo-name.git

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改。

克隆GitHub远程仓库

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。