git基础知识图解(Git教程二)
git基础知识图解(Git教程二)18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main) $ vim itlab1024.txt 18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main) $ git status On branch main No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) itlab1024.txt nothing added to commit but untracked files present (use "git add" to track)此时可以看到提示了Untracked
Git常用命令初始化仓库本地仓库一般有两种方式创建,一种是使用git init,一种是使用git clone。
git clone是通过从远端仓库克隆到本地,但是目前没有远程仓库。之后讲解。先介绍git init。
打开git bash客户端,进入一个项目目录,D:\workspace\git-tutor,然后执行指令。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor
$ git init -b main
Initialized empty Git repository in D:/workspace/git-tutor/.git/
#删除.git文件,重新使用--initial-branch初始化,需要注意=不要遗漏
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor
$ git init --initial-branch=main
Initialized empty Git repository in D:/workspace/git-tutor/.git/
-b <branch-name>是--initial-branch=<branch-name>的简写。通过该参数可以指定分支的名称,如果不指定默认是使用安装或者后来设置的init.defaultbranch。
查看本地库状态通过git status指令查看本地库的状态
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
No commits yet
nothing to commit (create/copy files and use "git add" to track)
No commits yet:没有提交任何文件,会提示这个。
nothing to commit (create/copy files and use "git add" to track):提示可以创建或者拷贝文件,然后使用git add 进行文件跟踪。
那么就新增一个文件itlab1024.txt(文件是空的即可)。再次查看本地库状态。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ vim itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
itlab1024.txt
nothing added to commit but untracked files present (use "git add" to track)
此时可以看到提示了Untracked files,也就是说itlab1024,虽然在工作空间,但是并没有被git追踪。
将文件添加到暂存区使用git add [文件路径或者文件名,多个文件可以使用空格分开]
接下来将itlab1024.txt文件放到暂存区,并查看本地库状态
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git add itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: itlab1024.txt
注意Changes to be committed以及之后的文字,意思就是已经add了,此时用户是可以反悔的(还未提交到本地仓库),可以使用git rm --cached将其从暂存区中删除(并不会删除文件)
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git rm --cached itlab1024.txt
rm 'itlab1024.txt'
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
itlab1024.txt
nothing added to commit but untracked files present (use "git add" to track)
可以看到,文件又回到了未追踪的状态。
提交文件到本地库使用git add 的文件会被放到暂存区,然后再使用git commit 命令将暂存区的文件提交到本地仓库。提交到本地仓库的文件,会记录版本信息,生成commit id。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git add .
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git commit -m "第一次提交itlab1024.txt"
[main (root-commit) 16e6ddd] 第一次提交itlab1024.txt
1 file changed 0 insertions( ) 0 deletions(-)
create mode 100644 itlab1024.txt
我使用了git commit -m "第一次提交itlab1024.txt"将文件从暂存区提交到了本地库。-m用于指定提交的信息,这里要说明下,实际开发中信息不要随便填写,要好好描述本次提交的内容。
提交后再次查看仓库状态。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
nothing to commit working tree clean
可以看到没有什么可以提交了。
提交后的文件会生成历史日志,后面会讲到如何查看日志。
修改文件上面我们已经将itlab1024.txt文件提交到了本地仓库,那么实际开发中,我们是可能再次修改该文件的。接下来就下改下。然后查看状态,看看是什么情况。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ vim itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ cat itlab1024.txt
https://itlab1024.com
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
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: itlab1024.txt
no changes added to commit (use "git add" and/or "git commit -a")
看git status输出的信息可以看到。提示了我们可以使用git add将修改提交,也可以使用git restore丢弃更改。
首先我使用git restore丢弃更改,来看下有什么效果。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git restore itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
nothing to commit working tree clean
可以看到,刚才的修改没了。
结论:git restore指令使得在工作空间但是不在暂存区的文件撤销更改(内容恢复到没修改之前的状态)
如果确定修改没问题,就可以使用git add将其加入到暂存区。(还得重新修改下文件)
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ vim itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
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: itlab1024.txt
no changes added to commit (use "git add" and/or "git commit -a")
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git add .
warning: in the working copy of 'itlab1024.txt' LF will be replaced by CRLF the next time Git touches it
当执行git add .(.带代表当前目录)后,就将文件放到了暂存区。
注意:这里有个警告。warning: in the working copy of 'itlab1024.txt' LF will be replaced by CRLF the next time Git touches it,什么意思呢?因为windows的换行符是CRLF,Linux上使用的是LF,这里git做了自动替换。不用处理,这是合理的操作。
再次查看状态
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: itlab1024.txt
此时可以使用git restore --staged <file>...将暂存区的文件从暂存区撤出,但不会更改文件的内容。
尝试下:
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git restore --staged itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
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: itlab1024.txt
no changes added to commit (use "git add" and/or "git commit -a")
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ cat itlab1024.txt
结论:git restore --staged <file>...将暂存区的文件从暂存区撤出,但不会更改文件的内容。
历史日志使用git commit 后就会生成历史日志,查看日志使用git log指令或者git reflog,前者显示详细日志信息,后者显示简短信息
首先我将上卖弄的修改提交。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git add .
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git commit -m "第二次提交itlab1024.txt"
[main ee75cce] 第二次提交itlab1024.txt
1 file changed 1 insertion( )
查看简略日志信息:
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git reflog
ee75cce (HEAD -> main) HEAD@{0}: commit: 第二次提交itlab1024.txt
16e6ddd HEAD@{1}: commit (initial): 第一次提交itlab1024.txt
查看详细日志:
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git log
commit ee75cce6f7fbaea4e300ec18d1f36ac606156d07 (HEAD -> main)
Author: Eleven <itlab1024@163com>
Date: Sat Nov 5 21:15:30 2022 0800
第二次提交itlab1024.txt
commit 16e6ddd4f471f48bb605ad337a8b3f874176f2ba
Author: Eleven <itlab1024@163com>
Date: Sat Nov 5 20:48:13 2022 0800
第一次提交itlab1024.txt
可以看到两次提交的历史记录。commit 16e6ddd4f471f48bb605ad337a8b3f874176f2ba中commit后面的一串字符就是commit id。
(HEAD -> main)代表head指向了最后一次提交。默认就会指向最后一次提交。
版本回滚版本回滚的情况是,比如像我上面提交了两次,假设我第二次修改错了,我想回滚到之前的版本。就可以使用git reset [commit id | 分支名]命令,具体使用请看下面的代码。
#使用git reflog 查看到每次的commit id。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git reflog
ee75cce (HEAD -> main) HEAD@{0}: commit: 第二次提交itlab1024.txt
16e6ddd HEAD@{1}: commit (initial): 第一次提交itlab1024.txt
ee75cce和16e6ddd(commit id很长,使用简短的id也是没有问题的)就是两次提交的commit id,现在我要回滚到16e6ddd这次提交,而丢弃ee75cce这次提交。
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git reset --hard 16e6ddd
HEAD is now at 16e6ddd 第一次提交itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git status
On branch main
nothing to commit working tree clean
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git reflog
16e6ddd (HEAD -> main) HEAD@{0}: reset: moving to 16e6ddd
ee75cce HEAD@{1}: commit: 第二次提交itlab1024.txt
16e6ddd (HEAD -> main) HEAD@{2}: commit (initial): 第一次提交itlab1024.txt
可以看到当前的HEAD已经指向了commit id = 16e6ddd的提交,但是历史并不会回滚。会增加一条。
查看下itlab1024.txt
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ cat itlab1024.txt
可以看到itlab1024.txt已经回滚到了第一次提交了,第二次提交的内容没了。
这里需要注意,本地仓库git reset --hard看不出什么问题。但是如果要提交远程仓库就会有问题。为什么,因为会冲突。想要提交只能使用git push -f (-f代表强制)强制提交,后续慢慢讲解。
修改提交信息当使用git commit 将文件提交到本地仓库后,有时候可能觉得当时提交时写的备注信息不准确或者错误。想要修改。此时可以使用git commit --amend,需要注意的是他只能修改上一次提交的备注信息。
首先查看下log
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git reflog
16e6ddd (HEAD -> main) HEAD@{0}: reset: moving to 16e6ddd
ee75cce HEAD@{1}: commit: 第二次提交itlab1024.txt
16e6ddd (HEAD -> main) HEAD@{2}: commit (initial): 第一次提交itlab1024.txt
接下来执行git commit --amend
此时会打开编辑器,修改备注信息即可。
修改为:
保存后,打印如下信息
[main 8961921] 第一次提交itlab1024.txt(after reset)
Date: Sat Nov 5 20:48:13 2022 0800
1 file changed 0 insertions( ) 0 deletions(-)
create mode 100644 itlab1024.txt
再次查看下log
18516@ZhenchaoShi MINGW64 /d/workspace/git-tutor (main)
$ git reflog
8961921 (HEAD -> main) HEAD@{0}: commit (amend): 第一次提交itlab1024.txt(after reset)
16e6ddd HEAD@{1}: reset: moving to 16e6ddd
ee75cce HEAD@{2}: commit: 第二次提交itlab1024.txt
16e6ddd HEAD@{3}: commit (initial): 第一次提交itlab1024.txt
可以看到备注信息已经被修改成功。
常用指令其实就上面这些,不过上面也只是列出了基本使用说明,每种指令都会有一些参数,使用者自己积累吧。