网站首页 > 技术文章 正文
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
可以看到备注信息已经被修改成功。
常用指令其实就上面这些,不过上面也只是列出了基本使用说明,每种指令都会有一些参数,使用者自己积累吧。
- 上一篇: Git入门教程,详解Git文件的四大状态
- 下一篇: 从游戏存档的保存聊聊Git远程版本库
猜你喜欢
- 2024-10-07 如何编写gitignore文件(git怎么用)
- 2024-10-07 Git 工具 - 子模块(github 子模块)
- 2024-10-07 用git管理版本,你必须知道的事情
- 2024-10-07 详解Github的.gitignore忽略文件+.gitignore不生效解决+生产配置
- 2024-10-07 Git数据迁移:迁移代码到新仓库(git版本库迁移)
- 2024-10-07 收藏就行了:最全git总结(gitjournal)
- 2024-10-07 程序员必须掌握版本控制的工具 --- git(一)
- 2024-10-07 Github怎么上传超过100M的大文件?
- 2024-10-07 Git最全总结(git ci)
- 2024-10-07 Git使用的小技巧(git的使用超详细版教程)
- 1517℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 596℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 521℃MySQL service启动脚本浅析(r12笔记第59天)
- 489℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 489℃启用MySQL查询缓存(mysql8.0查询缓存)
- 477℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 456℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 454℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)