目录
参考:
https://www.liaoxuefeng.com/wiki/896043488029600
https://git-scm.com/book/zh/v2
一、获取 Git 仓库
通常有两种获取 Git 项目仓库的方式:
- 将尚未进行版本控制的本地目录转换为 Git 仓库;
- 从其它服务器 克隆 一个已存在的 Git 仓库。
两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。
首先选定本地Git的位置,用cd命令设置为当前目录:
$ cd /c/user/my_project
有需要的话可以在当前目录下创建新目录:
$ mkdir new_project
1. 在已存在目录中初始化仓库
将本地目录初始化:
$ git init
追踪目录中的文件:
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
2. 克隆现有的远程仓库
克隆远程仓库:
$ git clone https://github.com/libgit2/libgit2 mylibgit
这会在当前目录下创建一个名为 “mylibgit” 的目录,并在这个目录下初始化一个 .git 文件夹, 从远程仓库拉取下所有数据放入 .git 文件夹。如果不加名称参数则使用远程文件夹名称“libgit2”。
二、文件状态:跟踪、暂存、提交
未跟踪 未修改 已修改 已暂存
1. 检查当前文件状态
git status
可以用 git status
命令查看哪些文件处于什么状态:
$ git status
已跟踪文件在上次提交后都未被更改过,显示状态:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
已跟踪文件的内容发生了变化,但还没有放到暂存区:
$ git status
On branch master
Your branch is up-to-date with 'origin/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: README
文件处于暂存(staged)状态:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: README
存在未跟踪文件时,显示状态:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
TEST
nothing added to commit but untracked files present (use "git add" to track)
git diff
查看具体变更内容:
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
可以从上面的命令输出看到,我们在第一行添加了一个distributed
单词。
2. 文件状态变更
新建文件:
$ echo 'My Project' > README
在文件中新加一行:
$ echo 'add some information' >> README
跟踪新文件,或将修改进行暂存(可理解为将内容添加到下一次提交中):
$ git add README
提交文件,并启动文本编辑器来输入comments:
$ git commit
提交文件,并将提交信息与命令放在同一行:
$ git commit -m "输入comments"
把所有已经跟踪过的文件暂存起来一并提交(跳过git add到暂存区的步骤):
$ git commit -a -m 'added new benchmarks'
[master 83e38c7] added new benchmarks
1 file changed, 5 insertions(+), 0 deletions(-)
忽略文件(无需纳入 Git 的管理的日志文件、临时文件等):
——创建一个名为
.gitignore
的文件,列出要忽略的文件的模式
$ cat .gitignore
# 忽略所有以 .o 或 .a 结尾的文件,一般这类对象文件和存档文件都是编译过程中出现的
*.[oa]
# 忽略所有名字以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本
*~
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
文件
.gitignore
的格式规范如下:
所有空行或者以
#
开头的行都会被 Git 忽略。可以使用标准的 glob 模式(shell 所使用的简化了的正则表达式)匹配,它会递归地应用在整个工作区中。
匹配模式可以以(
/
)开头防止递归。匹配模式可以以(
/
)结尾指定目录。要忽略指定模式以外的文件或目录,可以在模式前加上叹号(
!
)取反。
三、版本控制
1. 查看提交历史
我们用git log
命令查看:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
$ git log --pretty=oneline