$ git init
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件。
$ git init
Initialized empty Git repository in F:/GitTest2/.git/
$ git clone
该命令执行的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
$ git clone [url] 该命令方式会在当前文件夹下连接远程仓库并默认名字在本地创建本地仓库
$ git clone https://github.com/fancyop/GitTest.git
Cloning into 'GitTest'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 4 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
$ ls
GitTest/
git clone [url] [<directory>] 该命令方式会在当前文件夹下连接远程仓库并自定义名字在本地创建本地仓库
$ git clone https://github.com/fancyop/GitTest.git myGitTest
Cloning into 'myGitTest'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 4 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
$ ls
GitTest/ myGitTest/
$ git add
该命令来实现对指定文件的跟踪,添加需要记录的文件到暂存区域。
添加单个文件README.md
$ git add README.md
添加同一类型文件
$ git add *.c
添加所有文件
$ git add *
添加指定文件夹的指定文件,如添加当前目录下Documentation目录下的所有txt文件
$ git add Documentation / * .txt
$ git status
该命令用于查看文件处于什么状态
如果在克隆仓库后立即使用此命令,会看到类似这样的输出:
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
如果之前并不存在这个文件,现在在项目下创建新的README文件,使用 $ git status ,可以看到一个未跟踪的文件
$ echo 'Op Fancy' > 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)
README
nothing added to commit but untracked files present (use "git add" to track)
接着上一步,然后我使用 $ git add README 跟踪文件,把文件添加到暂存区域,此时再运行 $ git status
$ git add README
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
再接着上一步,我修改已经添加到暂存区域的文件README,再运行 $ git status
$ echo 'Op Fancy------2' > README
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
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
git status 命令的输出十分详细,但其用语有些繁琐。 如果你使用 git status -s 命令或 git status --short 命令,你将得到一种更为紧凑的格式输出。运行 git status -s,输出如:
$ git status -s
D lcd.c
A lcd.h
AM led.c
M main.c
M led.h
MM Rakefile
?? test.txt
新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记,从工作区删除了的文件前面有D标记。
例如,上面的状态报告显示: main.c 文件在工作区被修改了但是还没有将修改后的文件放入暂存区,led.h 文件被修改了并将修改后的文件放入了暂存区。 而 Rakefile 在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录,lcd.h被从工作区移除了。
$ git diff
如果 git status
命令的输出对于你来说过于模糊,你想知道具体修改了什么地方,可以用 git diff
命令。要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff
$ git diff diff --git a/README b/README index b8fb9e8..def5474 100644 --- a/README +++ b/README @@ -1,2 +1 @@ -Op Fancy -Op Fancy +Op Fancy------2 diff --git a/led.c b/led.c index e9e6383..8b13789 100644 --- a/led.c +++ b/led.c @@ -1 +1 @@ -sss + diff --git a/main.c b/main.c index e69de29..2df9f72 100644 --- a/main.c
@@ -0,0 +1 @@
+xxxxx
若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached
命令。
$ git diff --cached
diff --git a/lcd.c b/lcd.c
deleted file mode 100644
index e69de29..0000000
diff --git a/lcd.h b/lcd.h
new file mode 100644
index 0000000..e9e6383
--- /dev/null
+++ b/lcd.h
@@ -0,0 +1 @@
+sss
diff --git a/led.c b/led.c
new file mode 100644
index 0000000..e9e6383
--- /dev/null
+++ b/led.c
@@ -0,0 +1 @@
+sss
$ git commit
现在的暂存区域已经准备妥当可以提交了。 在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add
过,否则提交的时候不会记录这些还没暂存起来的变化。 这些修改过的文件只保留在本地磁盘。 所以,每次准备提交前,先用 git status
看下,是不是都已暂存起来了, 然后再运行提交命令 git commit,
这种方式会启动文本编辑器以便输入本次提交的说明。这种方式会启动文本编辑器以便输入本次提交的说明。 (默认会启用 shell 的环境变量 $EDITOR
所指定的软件,一般都是 vim 或 emacs。使用 git config --global core.editor
命令设定你喜欢的编辑软件。)
编辑器会显示类似下面的文本信息(本例选用 Vim 的屏显方式展示)
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
# (use "git push" to publish your local commits)
#
# Changes to be committed:
# new file: test.txt
#
# Changes not staged for commit:
# modified: README
# modified: led.c
# modified: main.c
#
你可以在第一行添加相关的描述信息,选择保存,就会出现以下信息:
$ git commit
[master 0580816] XXXXXXXXXXXX
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.txt
另外也可以在 commit
命令后添加 -m
选项,将提交信息与命令放在同一行,如下所示:
$ git commit -m '测试提交信息'
On branch master
Your branch is ahead of 'origin/master' by 4 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
modified: README
modified: led.c
modified: main.c
no changes added to commit
Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:
$ git commit -am '测试提交信息'
[master 885c62f] 测试提交信息
3 files changed, 3 insertions(+), 3 deletions(-)
$ git rm
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
(译注:即 force 的首字母)。
$ git rm test.txt
rm 'test.txt'
$ git status -s
D test.txt
下一次提交(commit)时,该文件就不再纳入版本管理了。
git rm
命令后面可以列出文件或者目录的名字,如:
$ git rm log/*.log
注意到星号 *
之前的反斜杠 , 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。 此命令删除
log/
目录下扩展名为 .log
的所有文件。
如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可,如:
$ git rm --cached README
$ git mv
要在 Git 中对文件改名,可以这么做:
$ git mv README.md README
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README