Git系列篇

Git基础一

2017-06-12  本文已影响150人  拙峰朽木

版本库的创建:

git status

检验当前文件状态

image.png

进入某个文件夹,然后用git status检验一下,发现会提示我们当前文件夹并未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM。就是当前文件夹不是git仓库。如何创建git 仓库呢?

git init

先创建个空文件夹

image.png

对文件件初始化:

image.png

此时我们用: ls -a 查看当前文件夹下所有文件,会发现个隐藏文件.git

image.png

注:其中“.”和".."是linux下的一种隐藏文件分别代表当前文件夹和上一级文件夹
我们现在尝试着删除.git文件会怎样,

frc@frc:~/GitHub/study/GitStudy$ rm -rf .git/
frc@frc:~/GitHub/study/GitStudy$ ls
frc@frc:~/GitHub/study/GitStudy$ ls -a
.  ..

此时再用“git status” 来看看:

frc@frc:~/GitHub/study/GitStudy$ git status
fatal: 不是一个 git 仓库(或者向上递归至挂载点 /home 的任何祖先目录)
停止在文件系统边界(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM)。

我们发现它又说当前不是git仓库,这说明git init其实就是生成了.git文件目录。

我们来看看.git里到底有些什么:

frc@frc:~/GitHub/study/GitStudy/.git$ ls -a
.  ..  branches  config  description  HEAD  hooks  info  objects  refs

有文件夹有文件,用过git的会在这发现些熟悉的关键字,比如说:branches, HEAD等。
对这些文件先不做详解。后面会一一分析

git add

image.png

我们用git status 查看当前的git空仓库,会有三行提示,其中最后一行告诉我们创建/拷贝文件并使用** git add** 建立跟踪

我们在当前仓库内创建个REDME.text文件:

frc@frc:~/GitHub/study/GitStudy$ vi REDME.text

然后在里面随便写句话:

image.png

此时我们输入git status看看:

image.png
此时我们会发现我们新创建的REDME.text文件显示为红色,并告诉我们尚存在未跟踪的文件,so 我们就按它指示用git add来试试:
frc@frc:~/GitHub/study/GitStudy$ git add
没有指定文件,也没有文件被添加。
也许您想要执行 'git add .'?

我们输入git add ,它提示我们没有指定文件,那么我们来指定下:

image.png

注解:git add . 是将当前仓库下所有未被追踪的都追踪上

我们指定了REDME为追踪文件,然后看到REDME.text变成绿色了。并且提示我们REDME.text是要提交的变更,并且可以使用 "git rm --cached <file>..." 撤出暂存区。
这里有个关键字暂存区,很重要的一个概念,下一篇我们再细讲。

git commit

上面提示中有说到:REDME.text现在是要提交的变更,那么现在我来提交它,提交的命令是git commit,

image.png
这里它会让我们提交变更的说明。
真实开发中我们可以用 git commit -m"xxxxx"来替代,可以直接在双引号中输入提交说明。
frc@frc:~/GitHub/study/GitStudy$ git commit
[master f697f00]   first commit again
 1 file changed, 1 insertion(+), 1 deletion(-)
frc@frc:~/GitHub/study/GitStudy$ git status
位于分支 master
无文件要提交,干净的工作区
frc@frc:~/GitHub/study/GitStudy$ 

commit 之后再调git status它提示我们当前是个干净的工作区了。

git commit -a -m

每次提交文件,需要git add 和git commit 对于老司机有些繁琐。我们明确知道当前文件需要提交的时候可以跳过git add 即不将文件放入暂存区。直接使用 git commit -a -m"xxx提交说明xxxx" 来提交
我们在REDME.text中加上"test git commit -a -m"这句话来测试

frc@frc:~/GitHub/study/GitStudy$ git diff
diff --git a/REDME.text b/REDME.text
index 5da4642..55070be 100644
--- a/REDME.text
+++ b/REDME.text
@@ -1,3 +1,4 @@
 //////
       welcome to study git!
 test git diff
+test git commit -a -m
frc@frc:~/GitHub/study/GitStudy$ git commit -a -m"test git commit -a -m"
[master 26de8cf] test git commit -a -m
 1 file changed, 1 insertion(+)

我们看到我们提交成功了

git diff

如果你想知道当前具体修改了哪些内容,那么使用git status不够用了,此时我们需要用到git diff来查看,git diff 将通过文件补丁的格式显示具体哪些行发生了改变。
现在我们对REDME.text改些东西:

image.png

现在我们使用git diff 来看看:

frc@frc:~/GitHub/study/GitStudy$ git diff
diff --git a/REDME.text b/REDME.text
index 8753674..5da4642 100644
--- a/REDME.text
+++ b/REDME.text
@@ -1 +1,3 @@
+//////
       welcome to study git!
+test git diff

首先:git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。
其中+符号后面就是这次添加的内容,
我在运行下 git add 将变化加入暂缓区,此时再使用 git diff 发现什么都不显示了。

查看已存在暂缓区的变动,需要用到 git diff --cached或者git diff --staged两者效果一样:

frc@frc:~/GitHub/study/GitStudy$ git diff --cached
diff --git a/REDME.text b/REDME.text
index 8753674..5da4642 100644
--- a/REDME.text
+++ b/REDME.text
@@ -1 +1,3 @@
+//////
       welcome to study git!
+test git diff

记得将它提交。

frc@frc:~/GitHub/study/GitStudy$ git add .
frc@frc:~/GitHub/study/GitStudy$ git commit -m"test git diff"
[master 3d0a19a] test git diff
 1 file changed, 2 insertions(+)

[master 3d0a19a] test git diff :告诉我们提交到主分支了,commit_id 是3d0a19a,
1 file changed, 2 insertions(+):修改了一个文件,2个插入。

git rm

对于一个已经提交 过的文件,我们在磁盘上把它删除会怎样呢?
首先我们先创建一个只有"test for git rm"一句话的文件,命名为testForGitRm.txt。然后git add 。再到文件夹中去把这个文件删除。现在运行git status

frc@frc:~/GitHub/study/GitStudy$ git add testForGitRm.txt 
frc@frc:~/GitHub/study/GitStudy$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <file>..." 撤出暂存区)

    新文件:   testForGitRm.txt
frc@frc:~/GitHub/study/GitStudy$ git commit -m"test for git rm"
[master 7024df8] test for git rm
 1 file changed, 2 insertions(+)
 create mode 100644 testForGitRm.txt

现在删除testForGitRm文件

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “尚未暂存以备提交的变更” 部分(也就是 未暂存清单)看到:

frc@frc:~/GitHub/study/GitStudy$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add/rm <file>..." 更新要提交的内容)
  (使用 "git checkout -- <file>..." 丢弃工作区的改动)

    删除:     testForGitRm.txt

然后再运行 git rm 记录此次移除文件的操作,下一次提交时,该文件就不再纳入版本管理了:

frc@frc:~/GitHub/study/GitStudy$ git rm testForGitRm.txt
rm 'testForGitRm.txt'
frc@frc:~/GitHub/study/GitStudy$ git status
位于分支 master
无文件要提交,干净的工作区

其实就是告诉git我已经移除了这个文件。

另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。我们可以使用**git rm --cached **

上一篇下一篇

猜你喜欢

热点阅读