Git 本地仓库初始化 基础指令 add commit reset diff

Git本地结构

Workspace: 工作区,我们写代码的地方,即能看到的目录文件

Index / Stage: 暂存区,用于临时存放代码变更,将要提交的内容但还没有提交,一般存放在 .git 目录下的 index 文件

Repository: 仓库区,就是安全存放代码的地方,存放着所有的历史版本。其中HEAD指向最新放入仓库的版本,即隐藏目录 .git

Remote: 远程仓库,托管代码的服务器,例如GitHub,Gitee

工作区 暂存区 仓库区 add 添加文件 commit 提交文件 reset 到某个历史版本 rm 删除 diff 比对内容 diff [HEAD] [filename] 工作区 暂存区 仓库区

基础命令

git命令与linux相同,均为Linus开发的开源软件

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp
$ git --version       #查看git版本
git version 2.32.0.windows.2
$ clear          #清屏

设置签名

设置用户名和邮箱

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp
$ git config --global user.name "skprimin"

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp
$ git config --global user.email "skprimin@163.com"

初始化本地仓库

创建文件夹GitRespGit 进入该目录,初始化命令git init,会自动生成.git文件夹,内容不能删除,不能胡乱修改

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp
$ git init
Initialized empty Git repository in D:/JAVA_FILE/GitResp/.git/

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ ls -la
total 8
drwxr-xr-x 1 SKPrimin 197121 0 Jul 30 11:55 ./
drwxr-xr-x 1 SKPrimin 197121 0 Jul 30 11:48 ../
drwxr-xr-x 1 SKPrimin 197121 0 Jul 30 11:55 .git/

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ cd .git/

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp/.git (GIT_DIR!)
$ ls
HEAD  config  description  /  info/  objects/  refs/

添加与提交及状态查看

  • 添加文件add,将文件提交到暂存区

  • 提交文件commit,将暂存区的文件提交到本地库,也可以加上文件名指定文件,- m "注释内容"可添加注释

    • Note:不在本地仓库的内容不受Git管理,即使放进也需手动提交到到仓库区方能受git管理
  • status查看命令

若本地仓所有内容均受git管理

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git status
On branch master # 在主分支
nothing to commit, working tree clean # 无可提交内容,工作树干净

有新文件后

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        gt02.txt  # 红色字体

nothing added to commit but untracked files present (use "git add" to track) 
# 没有添加任何提交但存在未跟踪的文件(使用“git add”来跟踪)

使用git add将文件添加到暂存区

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git add gt02.txt

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   gt02.txt  # 绿色字体

使用git commit提交至仓库区

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git commit -m "这是gt02测试文件" "gt02.txt"
[master 1f909fa] 这是gt02测试文件
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 gt02.txt

对文件进行修改后再查看状态

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/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:   gt02.txt  # 红色

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

将修改后的文件重新提交

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git add gt02.txt

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git commit -m "修改了内容,add something" "gt02.txt"
[master 28f40e1] 修改了内容,add something
 1 file changed, 1 insertion(+)

查看历史记录

  • git log
SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git log
commit 28f40e1fd47efd3b92a6bb16b6d0fc8bcd8abc2b (HEAD -> master)  #历史记录索引
Author: skprimin <skprimin@163.com>
Date:   Sat Jul 31 13:17:09 2021 +0800

    修改了内容,add something

commit 1f909fa3494ae0be4e39e4f67d96d63194855967
Author: skprimin <skprimin@163.com>
Date:   Sat Jul 31 12:46:43 2021 +0800

    这是gt02测试文件

当历史记录过多时会分屏,上一页B,下一页space 空格,未到尾页显:,到尾页显示END,退出Q

  • git log --pretty=oneline
SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git log --pretty=oneline
28f40e1fd47efd3b92a6bb16b6d0fc8bcd8abc2b (HEAD -> master) 修改了内容,add something
1f909fa3494ae0be4e39e4f67d96d63194855967 这是gt02测试文件
1db7f13f218db0969fe4cf53230f22bce60c1dbf First file GitTest01
  • git log --oneline
SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git log --oneline
28f40e1 (HEAD -> master) 修改了内容,add something
1f909fa 这是gt02测试文件
1db7f13 First file GitTest01
  • git reflog

HEAD@{number}:指针回到该历史版本需要的步数number

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git reflog
28f40e1 (HEAD -> master) HEAD@{0}: commit: 修改了内容,add something
1f909fa HEAD@{1}: commit: 这是gt02测试文件
1db7f13 HEAD@{2}: commit (initial): First file GitTest01

reset

  • git reset --hard 索引

仓库区指针移动同时,重置暂存区、工作区

首先git reflog查看历史记录

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git reflog
aa7459a (HEAD -> master) HEAD@{0}: commit: 第三次添加了内容
7ba1bc9 HEAD@{1}: commit: 第二次添加了内容
28f40e1 HEAD@{2}: commit: 修改了内容,add something
1f909fa HEAD@{3}: commit: 这是gt02测试文件
1db7f13 HEAD@{4}: commit (initial): First file GitTest01

接着git reset --hard 7ba1bc9,回退到第二次修改时状态,此时HEAD指针也已回退到

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git reset --hard 7ba1bc9
HEAD is now at 7ba1bc9 第二次添加了内容

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git reflog
7ba1bc9 (HEAD -> master) HEAD@{0}: reset: moving to 7ba1bc9
aa7459a HEAD@{1}: commit: 第三次添加了内容
7ba1bc9 (HEAD -> master) HEAD@{2}: commit: 第二次添加了内容
28f40e1 HEAD@{3}: commit: 修改了内容,add something
1f909fa HEAD@{4}: commit: 这是gt02测试文件
1db7f13 HEAD@{5}: commit (initial): First file GitTest01

打开文件发现内容已回退到第二次修改时

  • git reset --mixed 索引

仓库区指针移动同时,重置暂存区,工作区你不变

  • git reset --soft 索引

仓库区指针移动,暂存区、工作区不变

reset 参数:

区 位 参 数 {区位 \over 参数} 仓库区暂存区本地库
–hard改变改变改变
–mixed改变改变Not
–soft改变NotNot

文件删除

新建测试文件tsc.txt并提交到仓录区

  1. rm tsc.txt删除工作区文件

    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ rm tsc.txt
    
    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            deleted:    tsc.txt # 红色
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
  2. 同步删除暂存区文件

    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git add tsc.txt
    
    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            deleted:    tsc.txt # 绿色
    
  3. 同步删除仓库区文件

    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git commit -m "删除tsc.txt文件" tsc.txt
    [master ffc7261] 删除tsc.txt文件
     1 file changed, 0 insertions(+), 0 deletions(-)
     delete mode 100644 tsc.txt
    

查看记录

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git reflog
ffc7261 (HEAD -> master) HEAD@{0}: commit: 删除tsc.txt文件
f5fdb2a HEAD@{1}: commit: 添加tsc.txt

Note:这里的删除仅仅是移动了HEAD指针,恢复文件也只需reset指令

文件恢复

  • 恢复上文删除的tsc.txt文件 git reset --hard f5fdb2a

    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git reset --hard f5fdb2a
    HEAD is now at f5fdb2a 添加tsc.txt
    
  • 恢复暂存区文件命令相同git reset --hard f5fdb2a

    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ rm tsc.txt
    
    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git add tsc.txt
    

    此时后悔,恢复暂存区

    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            deleted:    tsc.txt # 绿色
            
    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git reflog
    f5fdb2a (HEAD -> master) HEAD@{0}: reset: moving to f5fdb2a
    ffc7261 HEAD@{1}: commit: 删除tsc.txt文件
    f5fdb2a (HEAD -> master) HEAD@{2}: commit: 添加tsc.txt
    
    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git reset --hard f5fdb2a
    HEAD is now at f5fdb2a 添加tsc.txt
    
    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git reflog
    f5fdb2a (HEAD -> master) HEAD@{0}: reset: moving to f5fdb2a
    f5fdb2a (HEAD -> master) HEAD@{1}: reset: moving to f5fdb2a
    ffc7261 HEAD@{2}: commit: 删除tsc.txt文件
    f5fdb2a (HEAD -> master) HEAD@{3}: commit: 添加tsc.txt
    
    • 由于此时的索引仍为该文件,故可直接使用git reset --hard HEAD
    SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
    $ git reset --hard HEAD
    HEAD is now at f5fdb2a 添加tsc.txt
    

diff内容比对

  • git diff [filename]
    • git diff比较工作区中和暂存区中所有文件的差异
    • git diff [filename]比较工作区和暂存区filename文件的差异

首先创建gt03.txt文件并送入仓库区,随后向gt03.txt文件中添加内容

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git diff gt03.txt
diff --git a/gt03.txt b/gt03.txt
index e69de29..5e40c08 100644
--- a/gt03.txt
+++ b/gt03.txt
@@ -0,0 +1 @@
+asdf
\ No newline at end of file

修改内容

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git diff gt03.txt
diff --git a/gt03.txt b/gt03.txt
index 5e40c08..140717d 100644
--- a/gt03.txt
+++ b/gt03.txt
@@ -1 +1 @@
-asdf     # 减少行
\ No newline at end of file
+asdfabc  # 增加行
\ No newline at end of file

可以看出git是以一行为基础管理文件内容的,这也恰好符合我们代码格式

  • git diff [HEAD] [filename]

比较暂存区与仓库区内容

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git diff HEAD gt03.txt
diff --git a/gt03.txt b/gt03.txt
index 5e40c08..1afeafa 100644
--- a/gt03.txt
+++ b/gt03.txt
@@ -1 +1,2 @@
-asdf
\ No newline at end of file
+asdfabc
+123
\ No newline at end of file

与仓库区某一个历史版本比较

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git reflog
2155791 (HEAD -> master) HEAD@{0}: commit: gt03第一次修改+asdf
8673993 HEAD@{1}: commit: 这是gt03diff测试文件

SKPrimin@LAPTOP-VUQ1RT3J MINGW64 /d/JAVA_FILE/GitResp (master)
$ git diff 8673993 gt03.txt
diff --git a/gt03.txt b/gt03.txt
index e69de29..1afeafa 100644
--- a/gt03.txt
+++ b/gt03.txt
@@ -0,0 +1,2 @@
+asdfabc
+123
\ No newline at end of file
posted @ 2021-07-31 17:33  SKPrimin  阅读(161)  评论(0编辑  收藏  举报