ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Git小白学习笔记

2021-07-10 09:29:30  阅读:174  来源: 互联网

标签:HEAD git 笔记 小白 Git readme commit txt


一、安装Git
1.在Windows上安装Git
Git官网直接下载安装程序,然后按默认选项安装即可,安装完成后 鼠标右键发现有一个Git Bash Here点击之后,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
在这里插入图片描述
安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

设置自己的用户名和邮箱
二、创建版本库
1.
$ mkdir gittest mkdir命令用于创建文件
$ cd gitttest cd命令用于打开文件
$ pwd pwd命令用于显示当前目录
$ git init git init命令把这个目录变成Git可以管理的仓库
瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
2.把文件添加到版本库
编写一个readme.txt文件,内容如下:
abcdefghijklmn.`
一定要放到gittest目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。
一个文件放到Git仓库只需要两步:
第一步,第一步,用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
第二步,用命令git commit告诉Git,把文件提交到本地仓库:

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

解释:git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

继续修改readme.txt文件,改成如下内容:

1234567890

运行git status命令看看结果:

$ git status
On branch 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.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        ssm/

no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

git diff命令查看具体修改的内容

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 6764fed..6a537b5 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1 @@
-abcdefghijklmn
\ No newline at end of file
+1234567890
\ No newline at end of file

git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,改之前是abcdefghijklmn改之后是1234567890

知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的。

git log命令查看历史记录:

$ git log
commit 14c5ccbd2dbe7ed0fc7258334a8c2f42852989cf (HEAD -> master)
Author: Songluo <2776960985@qq.com>
Date:   Fri Jul 9 16:04:56 2021 +0800

    updata readme.txt

commit 91e4cc0ca86b7adabd2f0c395195aa5ca17fc831
Author: Songluo <2776960985@qq.com>
Date:   Fri Jul 9 15:45:57 2021 +0800

    wrote a readme.txt

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

$ git log --pretty=oneline
14c5ccbd2dbe7ed0fc7258334a8c2f42852989cf (HEAD -> master) updata readme.txt
91e4cc0ca86b7adabd2f0c395195aa5ca17fc831 wrote a readme.txt

类似14c5ccb…的是commit id(版本号)

三、版本回退
在Git中,用HEAD表示当前版本,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
我们查看一下当前版本就可以使用git reset命令:

$ git reset --hard HEAD
HEAD is now at 14c5ccb updata readme.txt

回退到上一个版本

$ git reset --hard HEAD^
HEAD is now at 91e4cc0 wrote a readme.txt

看看readme.txt的内容是不是abcdefghijklmn:

$ cat readme.txt
abcdefghijklmn

果然被还原了。

还可以继续回退到上一个版本wrote a readme file,不过且慢,让我们用git log再看看现在版本库的状态:

$ git log
commit 91e4cc0ca86b7adabd2f0c395195aa5ca17fc831 (HEAD -> master)
Author: Songluo <2776960985@qq.com>
Date:   Fri Jul 9 15:45:57 2021 +0800

    wrote a readme.txt

最新的那个版本updata readme.txt已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找,找到那个updata readme.txt的commit id是14c5c…,于是就可以指定回到未来的某个版本:

$ git reset --hard 14c5c
HEAD is now at 14c5ccb updata readme.txt

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

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

┌────┐
│HEAD│
└────┘

└──> ○ append GPL

○ add distributed

○ wrote a readme file
改为指向add distributed:

┌────┐
│HEAD│
└────┘

│ ○ append GPL
│ │
└──> ○ add distributed

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

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
*在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
14c5ccb (HEAD -> master) HEAD@{0}: reset: moving to 14c5c
91e4cc0 HEAD@{1}: reset: moving to HEAD^
14c5ccb (HEAD -> master) HEAD@{2}: reset: moving to HEAD
14c5ccb (HEAD -> master) HEAD@{3}: reset: moving to HEAD
14c5ccb (HEAD -> master) HEAD@{4}: commit: updata readme.txt
91e4cc0 HEAD@{5}: commit (initial): wrote a readme.txt

现在总结一下:

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
Git跟踪并管理的是修改,而非文件,每次修改,如果不用git add到暂存区,那就不会加入到commit中

四、撤销修改
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态.
命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。所以此命令既可以回退版本,也可以把暂存区的修改回退到工作区。
小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

五、删除
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

$ rm test.txt
$ git rm test.txt
$ git commit -m "remove test.txt"

标签:HEAD,git,笔记,小白,Git,readme,commit,txt
来源: https://blog.csdn.net/weixin_44073622/article/details/118607270

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有