Git入门总结(一)基本命令 偏执的太偏执、 2023-01-12 10:24 97阅读 0赞 ### 目录 ### * * 0. Git的安装 * 1. 创建本地仓库 * 2. \`add\`和\`commit\` * 3. \`status\` * 4. \`log\` * 6. \`reset\` * 7. 找回本地库删除的文件 * 8. 找回暂存区删除的文件 * 9. \`diff\`命令 Git这个东西,你说不会吧,但是平时也能用,你说很会吧,但是好多东西不太明晰,这次必须好好总结总结!将知识体系稳固住! ![在这里插入图片描述][20210128163539282.png] ## 0. Git的安装 ## 省略 ## 1. 创建本地仓库 ## 1. 新建文件夹: ![在这里插入图片描述][20210128114101774.png] 2. 打开Git,`Git Bash Here`: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70] 3. 查看Git版本: veeja@VeejaPC MINGW64 /e/code/GitResp $ git --version git version 2.30.0.windows.2 4. 设置Git用户名: $ git config --global user.name "veejaLiu" 5. 设置邮箱: $ git config --global user.email "veejaliu@gmail.com" 6. 本地仓库的初始化操作: veeja@VeejaPC MINGW64 /e/code/GitResp $ git init Initialized empty Git repository in E:/code/GitResp/.git/ 生成隐藏文件:![在这里插入图片描述][20210128140719149.png] 7. 查看`.git`文件夹: ![在这里插入图片描述][20210128140925662.png] .git目录下的本地库相关的子目录和子文件不要删除,不要胡乱修改。 ## 2. `add`和`commit` ## ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 1] 先创建一个文件,demo.txt: ![在这里插入图片描述][20210128141257434.png] 将文件提交到暂存区`git add demo.txt`: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git add demo.txt 将文件从暂存区放入本地库`git commit -m "注释"`: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git commit -m "这是第一次提交,新建了一个demo.txt" [master (root-commit) db44fb0] 这是第一次提交,新建了一个demo.txt 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demo.txt ## 3. `status` ## `status`是查看工作区和暂存区的状态的命令。 veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git status On branch master nothing to commit, working tree clean **上面的内容显示,没有东西要提交。** **我们新建一个demo2.txt,** 再次执行该命令查看: ![在这里插入图片描述][20210128142506584.png] veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) demo2.txt nothing added to commit but untracked files present (use "git add" to track) 我们可以看到,上面显示,有`untracked files:`,就是未追踪的文件:demo2.txt,还提醒我们使用git add 来添加到追踪。 **然后我们将demo2.txt添加到暂存区,** 再次查看status: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git add demo2.txt demo2.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: demo2.txt 再次提交: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git commit -m "这是第二次提交,添加了demo2.txt" [master 73799af] 这是第二次提交,添加了demo2.txt 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demo2.txt 查看状态: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git status On branch master nothing to commit, working tree clean 我们在文件demo2.txt里面添加一些内容: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 2] 查看状态`git status`: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: demo2.txt no changes added to commit (use "git add" and/or "git commit -a") 提示我们可以使用add来更新,有文件已经被修改了。 这个时候需要**我们重新添加,再次查看状态**: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git add demo2.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: demo2.txt 然后我们再commit一次,查看状态: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git commit -m "第三次提交,修改了demo2.txt" [master 26c58cd] 第三次提交,修改了demo2.txt 1 file changed, 1 insertion(+) veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git status On branch master nothing to commit, working tree clean ## 4. `log` ## 我们可以使用`git log`来查看日志: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git log commit 26c58cddfbdabb0c1f466420d71ed8e80540b9e5 (HEAD -> master) Author: veejaLiu <veejaliu@gmail.com> Date: Thu Jan 28 14:48:20 2021 +0800 第三次提交,修改了demo2.txt commit 73799afcf2ccf6588b817098041d0a88687095f0 Author: veejaLiu <veejaliu@gmail.com> Date: Thu Jan 28 14:32:52 2021 +0800 这是第二次提交,添加了demo2.txt commit db44fb0fa1fa65a039277c9c7071907d13b30293 Author: veejaLiu <veejaliu@gmail.com> Date: Thu Jan 28 14:18:20 2021 +0800 这是第一次提交,新建了一个demo.txt ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 3] 当我们进行多次操作的时候,`git log`命令不足以显示全部的日志信息,在下面会出现一个`:` ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 4] 这个时候我们按`空格键`就可以往下翻,按`B键`就可以往前退。 到尾页的时候,就显示`END`。 ![在这里插入图片描述][20210128153410513.png] 我们可以按`Q键`退出查看,继续我们的操作。 上面展示的信息太过于啰唆,我们可以采取几种简洁的展示方式: # 将一个版本的信息放到一行里面 veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git log --pretty=oneline 2bce1d3176c95f082f49fbbda3b8c2e9952e6866 (HEAD -> master) 删除了demo3~10.txt文件 e5eca9f79628ef76570f568884bde59c62c3140c 添加了demo3~10的文件 26c58cddfbdabb0c1f466420d71ed8e80540b9e5 第三次提交,修改了demo2.txt 73799afcf2ccf6588b817098041d0a88687095f0 这是第二次提交,添加了demo2.txt db44fb0fa1fa65a039277c9c7071907d13b30293 这是第一次提交,新建了一个demo.txt # 更简洁的一行显示 veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git log --oneline 2bce1d3 (HEAD -> master) 删除了demo3~10.txt文件 e5eca9f 添加了demo3~10的文件 26c58cd 第三次提交,修改了demo2.txt 73799af 这是第二次提交,添加了demo2.txt db44fb0 这是第一次提交,新建了一个demo.txt # reflog命令 一行显示 # 多了 HEAD@{数字}信息: # 这个数字的含义是指针回到当前的历史版本需要走的步数。 veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git reflog 2bce1d3 (HEAD -> master) HEAD@{ 0}: commit: 删除了demo3~10.txt文件 e5eca9f HEAD@{ 1}: commit: 添加了demo3~10的文件 26c58cd HEAD@{ 2}: commit: 第三次提交,修改了demo2.txt 73799af HEAD@{ 3}: commit: 这是第二次提交,添加了demo2.txt db44fb0 HEAD@{ 4}: commit (initial): 这是第一次提交,新建了一个demo.txt ## 6. `reset` ## 我们可以看到我们的版本记录,当前的版本为`2bce1d3`。 我们在最近的版本中,删除了demo3~10的文件,如果我们想恢复,这个时候应该怎么办? veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git reflog 2bce1d3 (HEAD -> master) HEAD@{ 0}: commit: 删除了demo3~10.txt文件 e5eca9f HEAD@{ 1}: commit: 添加了demo3~10的文件 26c58cd HEAD@{ 2}: commit: 第三次提交,修改了demo2.txt 73799af HEAD@{ 3}: commit: 这是第二次提交,添加了demo2.txt db44fb0 HEAD@{ 4}: commit (initial): 这是第一次提交,新建了一个demo.txt 我们需要使用`git reset`命令: # git reset --hard 索引号 veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git reset --hard e5eca9f HEAD is now at e5eca9f 添加了demo3~10的文件 我们可以再次查看日志: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git reflog e5eca9f (HEAD -> master) HEAD@{ 0}: reset: moving to e5eca9f 2bce1d3 HEAD@{ 1}: commit: 删除了demo3~10.txt文件 e5eca9f (HEAD -> master) HEAD@{ 2}: commit: 添加了demo3~10的文件 26c58cd HEAD@{ 3}: commit: 第三次提交,修改了demo2.txt 73799af HEAD@{ 4}: commit: 这是第二次提交,添加了demo2.txt db44fb0 HEAD@{ 5}: commit (initial): 这是第一次提交,新建了一个demo.txt 我们看到,`HEAD -> master`指向的节点已经变成了e5eca9f对应的版本了。 我们甚至可以在文件夹里面看到,那几个文件又神奇的回来了。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 5] ![在这里插入图片描述][20210128155619573.png] reset还有其他的参数, * 其中上面使用的`--hard`参数的含义是,当我们的本地库文件改变的时候,工作区和暂存区的内容也随之回退或者前进。这一个参数也是我们使用的最多的。 * –`mixed`参数:本地库改变的时候,暂存区随之改变,但是工作区不变。 * `--soft`:本地库改变的时候,暂存区和工作区都不改变。 ## 7. 找回本地库删除的文件 ## 我们新建一个文件Test2.txt, 并将它add到暂存区当中, 再将它提交到本地库。 veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git add Test2.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git commit -m "add Test2.txt" [master da8d40b] add Test2.txt 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Test2.txt 删除工作区中的Test2.txt: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 6] 将删除的操作同步到暂存区: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git add Test2.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) deleted: Test2.txt 将删除的操作同步到本地库: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git commit -m "删除Test2.txt" [master 6e9fc2f] 删除Test2.txt 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Test2.txt 查看日志: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git reflog 6e9fc2f (HEAD -> master) HEAD@{ 0}: commit: 删除Test2.txt da8d40b HEAD@{ 1}: commit: add Test2.txt e5eca9f HEAD@{ 2}: reset: moving to e5eca9f 2bce1d3 HEAD@{ 3}: commit: 删除了demo3~10.txt文件 e5eca9f HEAD@{ 4}: commit: 添加了demo3~10的文件 26c58cd HEAD@{ 5}: commit: 第三次提交,修改了demo2.txt 73799af HEAD@{ 6}: commit: 这是第二次提交,添加了demo2.txt db44fb0 HEAD@{ 7}: commit (initial): 这是第一次提交,新建了一个demo.txt 找回文件,也就是回退版本: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git reflog 6e9fc2f (HEAD -> master) HEAD@{ 0}: commit: 删除Test2.txt da8d40b HEAD@{ 1}: commit: add Test2.txt e5eca9f HEAD@{ 2}: reset: moving to e5eca9f 2bce1d3 HEAD@{ 3}: commit: 删除了demo3~10.txt文件 e5eca9f HEAD@{ 4}: commit: 添加了demo3~10的文件 26c58cd HEAD@{ 5}: commit: 第三次提交,修改了demo2.txt 73799af HEAD@{ 6}: commit: 这是第二次提交,添加了demo2.txt db44fb0 HEAD@{ 7}: commit (initial): 这是第一次提交,新建了一个demo.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git reset --hard da8d40b HEAD is now at da8d40b add Test2.txt ## 8. 找回暂存区删除的文件 ## 先删除文件,并且添加到暂存区: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ ll total 1 -rw-r--r-- 1 veeja 197121 0 Jan 28 16:13 Test2.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 14:12 demo.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo10.txt -rw-r--r-- 1 veeja 197121 10 Jan 28 14:36 demo2.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo3.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo4.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo5.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo6.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo7.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo8.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo9.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ rm Test2.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git add Test2.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) deleted: Test2.txt 这个时候我们后悔了,想恢复暂存区的数据,其实跟刚才一样,使用–hard参数,恢复本地库版本就行了: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git reflog da8d40b (HEAD -> master) HEAD@{ 0}: reset: moving to da8d40b 6e9fc2f HEAD@{ 1}: commit: 删除Test2.txt da8d40b (HEAD -> master) HEAD@{ 2}: commit: add Test2.txt e5eca9f HEAD@{ 3}: reset: moving to e5eca9f 2bce1d3 HEAD@{ 4}: commit: 删除了demo3~10.txt文件 e5eca9f HEAD@{ 5}: commit: 添加了demo3~10的文件 26c58cd HEAD@{ 6}: commit: 第三次提交,修改了demo2.txt 73799af HEAD@{ 7}: commit: 这是第二次提交,添加了demo2.txt db44fb0 HEAD@{ 8}: commit (initial): 这是第一次提交,新建了一个demo.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git reset --hard da8d40b HEAD is now at da8d40b add Test2.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ ll total 1 -rw-r--r-- 1 veeja 197121 0 Jan 28 16:20 Test2.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 14:12 demo.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo10.txt -rw-r--r-- 1 veeja 197121 10 Jan 28 14:36 demo2.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo3.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo4.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo5.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo6.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo7.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo8.txt -rw-r--r-- 1 veeja 197121 0 Jan 28 15:49 demo9.txt ## 9. `diff`命令 ## 新建一个Test3.txt: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 7] 添加并提交: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git add Test3.txt Test3.txt veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git commit -m "add Test3.txt" [master 063032b] add Test3.txt 1 file changed, 1 insertion(+) create mode 100644 Test3.txt 在Test3.txt中增加一些内容: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 8] 接下来,我们使用diff命令,比对文件的不同: veeja@VeejaPC MINGW64 /e/code/GitResp (master) $ git diff Test3.txt diff --git a/Test3.txt b/Test3.txt index 90929f7..30c52e9 100644 --- a/Test3.txt +++ b/Test3.txt @@ -1 +1,2 @@ -aaaaaaaaaaaaa \ No newline at end of file +aaaaaaaaaaaaa +bbbbbbbbbbbbbbbbbbbbbbbb \ No newline at end of file ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 9] 也可以使用`git diff [历史版本] [文件名]` 来比较暂存区和工作区中的内容。 ![在这里插入图片描述][20210128163609884.png] [20210128163539282.png]: /images/20221119/c18eaa856d8240bd948f98b869331939.png [20210128114101774.png]: /images/20221119/fa7dc2b0c8624fc3bc679579906fa975.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70]: /images/20221119/3d278112e014417db2a66521fcb7378d.png [20210128140719149.png]: /images/20221119/699062b4ad00482d8e9d51d0bd4851ae.png [20210128140925662.png]: /images/20221119/36ef6dd971244cb5945926a5da62147b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 1]: /images/20221119/83ea8e8562934df7bdc7f235edcb8b7e.png [20210128141257434.png]: /images/20221119/cd7f1ffa51434b7281c45cb5d80aa4af.png [20210128142506584.png]: /images/20221119/a6d18aaef67044f6bbb64b6ebbd3e1a2.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 2]: /images/20221119/f661e41af6f143f7aff901989e3a4b5b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 3]: /images/20221119/26465bbfb36b44239d5b11ed19fd580b.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 4]: /images/20221119/b18f8a2992a745d595b36329740168c7.png [20210128153410513.png]: /images/20221119/a4164038323c4a4e8083da741fdfa818.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 5]: /images/20221119/03f3fd09433e4397b0fbe047a09c3b2d.png [20210128155619573.png]: /images/20221119/59a01500284c4087b627eae61cb7e24c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 6]: /images/20221119/dfc079fdf2ba473493f085468abc4437.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 7]: /images/20221119/e7eda57442fd482293ae3335b696c63a.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 8]: /images/20221119/6ea20a25ad74454a876680f99f8764d5.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70 9]: /images/20221119/db2810d6109f43c0ad2358c18ba805a8.png [20210128163609884.png]: /images/20221119/0b3d10c2c0474a31842fd2630340c036.png
还没有评论,来说两句吧...