版本库的创建:
git status
检验当前文件状态
进入某个文件夹,然后用git status检验一下,发现会提示我们当前文件夹并未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM。就是当前文件夹不是git仓库。如何创建git 仓库呢?
git init
先创建个空文件夹
对文件件初始化:
此时我们用: ls -a 查看当前文件夹下所有文件,会发现个隐藏文件.git
注:其中“.”和".."是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
我们用git status 查看当前的git空仓库,会有三行提示,其中最后一行告诉我们创建/拷贝文件并使用** git add** 建立跟踪
我们在当前仓库内创建个REDME.text文件:
frc@frc:~/GitHub/study/GitStudy$ vi REDME.text
然后在里面随便写句话:
此时我们输入git status看看:
此时我们会发现我们新创建的REDME.text文件显示为红色,并告诉我们尚存在未跟踪的文件,so 我们就按它指示用git add来试试:
frc@frc:~/GitHub/study/GitStudy$ git add
没有指定文件,也没有文件被添加。
也许您想要执行 'git add .'?
我们输入git add ,它提示我们没有指定文件,那么我们来指定下:
注解:git add . 是将当前仓库下所有未被追踪的都追踪上
我们指定了REDME为追踪文件,然后看到REDME.text变成绿色了。并且提示我们REDME.text是要提交的变更,并且可以使用 "git rm --cached <file>..." 撤出暂存区。
这里有个关键字暂存区,很重要的一个概念,下一篇我们再细讲。
git commit
上面提示中有说到:REDME.text现在是要提交的变更,那么现在我来提交它,提交的命令是git commit,
这里它会让我们提交变更的说明。
真实开发中我们可以用 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改些东西:
现在我们使用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 **