快捷搜索:  汽车  科技

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

此时会打开编辑器,修改备注信息即可。

git基础知识图解(Git教程二)(1)

修改为:

git基础知识图解(Git教程二)(2)

保存后,打印如下信息

[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

可以看到备注信息已经被修改成功。

常用指令其实就上面这些,不过上面也只是列出了基本使用说明,每种指令都会有一些参数,使用者自己积累吧。

猜您喜欢: