git学习笔记1.0

git学习笔记

安装什么的可以看看廖雪峰git真心超赞!

写这个只是为了方便查看。。。郑重声明,鄙人没有任何商业目的!!!

请各位大佬勿喷!谢谢啦~O(∩_∩)O~

在建立完管理仓库之后:

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

$ git add 文件名(注意空格不能省略,这里最后说一次)

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

 git commit -m "wrote a readme file"
[master (根提交) 19afd69] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100755 readme.txt

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

可以多次add不同的文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

git status命令

可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

当没有东西的时候:

root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
无文件要提交,干净的工作区

git diff命令

root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git diff
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100755
--- 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.

查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个“distributed”单词

git log命令

显示从最近到最远的提交日志
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git log
commit 7da253b8467595d9a6806c0ab9d93d80cdc8564a
Author: jiayoudangdang <[email protected]>
Date:   Thu Feb 22 18:40:39 2018 +0800

    append GPL

commit 1392e4df18da3c13cbffaf55454a95833dbdd9fe
Author: jiayoudangdang <[email protected]>
Date:   Thu Feb 22 18:37:24 2018 +0800

    add distributed

commit 19afd699827b84b0b6671103e55c25f1f274e680
Author: jiayoudangdang <[email protected]>
Date:   Thu Feb 22 16:48:22 2018 +0800

    wrote a readme file

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git log --pretty=oneline
7da253b8467595d9a6806c0ab9d93d80cdc8564a append GPL
1392e4df18da3c13cbffaf55454a95833dbdd9fe add distributed
19afd699827b84b0b6671103e55c25f1f274e680 wrote a readme file
看到的一大串类似3628164...882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

每提交一个新版本,实际上Git就会把它们自动串成一条时间线。

git reset命令(后悔药)

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git reset --hard HEAD^
HEAD 现在位于 1392e4d add distributed

然后你发现,后悔药吃错了。。。想在吃回来(⊙o⊙)…没问题!

只要上面的命令行窗口还没有被关掉,找到那个append GPL的commit id是3628164...,于是就可以指定回到未来的某个版本:

root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git reset --hard 7da253b8467595d9a6806c0ab9d93d80cdc8564a
HEAD 现在位于 7da253b append GPL
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt Git is a distributed version control system.
Git is free software distributed under the GPL.

O(∩_∩)O回来啦~

cat命令

查看某文档

root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt 
Git is a distributed version control system.
Git is free software.

恩于是就说一下为何git的后悔药吃的那么爽!

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL

改为指向add distributed

然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

git reflog(后悔药的帮手)

关掉了电脑,突然后悔。。。想吃后悔药就必须找到commit id。
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git reflog
1392e4d HEAD@{0}: reset: moving to HEAD^
7da253b HEAD@{1}: reset: moving to 7da253b8467595d9a6806c0ab9d93d80cdc8564a
1392e4d HEAD@{2}: reset: moving to HEAD^
7da253b HEAD@{3}: commit: append GPL
1392e4d HEAD@{4}: commit: add distributed
19afd69 HEAD@{5}: commit (initial): wrote a readme file

恩,然后就可以按照之前的方法,回来~~!

git中,只有在暂存区的东西才能被提交到master

如果不知道什么是master请看:传送门

git checkout -- file命令

以丢弃工作区的修改:(就是在库中的文件,没上传之前叫工作区)

改之前与改之后的对比:

root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# vim readme.txt 
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt 
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git checkout -- readme.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt 
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.

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

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

git reset HEAD命令

添加到了暂存区,还没有提交到工作区~

root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt 
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
fuck!!!!!!!!get out!get away!!
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git add readme.txt 
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	修改:     readme.txt

恩已经添加到了暂存区

撤销:

root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git reset HEAD readme.txt 
重置后取消暂存的变更:
M	readme.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt 
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
fuck!!!!!!!!get out!get away!!
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

恩现在变成了没有到暂存区之前的模样了~

然后,丢弃在工作区的修改:

root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git checkout -- readme.txt 
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt 
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.

rm命令

在文件管理器中删除之后:git很聪明的,它知道你删除了文件的!!就像:
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat test.txt 
就是一个实验!一会我要将它删除
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git add test.txt 
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git commit -m "add test.txt"
[master 7afe5a2] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# rm test.txt 
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# ls
LICENSE.txt  readme.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# tree
.
├── LICENSE.txt
└── readme.txt

0 directories, 2 files
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add/rm <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	删除:     test.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:

$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt
现在,文件就从版本库中被删除了。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt

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

敬请期待!笔记2.0!!!感谢!!~O(∩_∩)O~

你可能感兴趣的:(Linux入门)