git简介
git是一种分布式版本控制系统,可以很有效的帮助我们管理在日常工作中开发中撰写的代码文件,协助我们完成版本管理,分支控制以及在出现Bug后能够准确的进行回滚
在我们日常的工作中,用到最多的git命令包括init(初始化仓库)、add(文件添加)、commit(版本提交)、branch(分支管理)、checkout(分支切换)、pull以及push(文件拉取和推送)等.
各个常用命令的使用方法以及使用场景如下:
git init
git init
是实现git仓库初始化的命令,用于将指定的文件夹初始化为git仓库
创建步骤
mkdir /newRepo
cd /newRepo
git init
如果在执行完毕后可以看到如下输出,则表明仓库初始化完成
Initialized empty Git repository in /Users/newRepo/.git/
并且,此时在该文件下会创建一个隐藏文件夹.git
,用来保存git的操作,切记不要轻易删除
除了git init
外,其他任何git命令都必须在对应的文件夹下操作
git add
git add
命令作用:将指定的文件添加至git仓库中
常用方式为git add <filename>
,表明将指定文件名的文件添加至git仓库中.
在日常的工作中,如果我们是在已有的仓库中进行的相关工作,则可以使用git add .
命令,将所有变更添加到仓库中
$ vim test.py
$ git add test.py
例如在仓库文件夹下,新建了test..py
文件,随后通过指定test.py
文件名,将该文件添加到仓库中
随后,我们可以通过git status
命令查看文件是否添加成功
$ git status
On branch develop
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: test.py
每次git add表明添加了一次历史版本
git commit
然而,只通过git add <filename>
将文件添加到仓库中是不够的.因为git add只是将当前文件添加至暂存区.接下来需要将文件提交至git仓库
将改动提交至git仓库需要用到git commit
命令,该命令的作用是将此次git暂存区文件提交至代码仓库,有点类似于我们在日常使用虚拟机时候创建的快照一样,当后续有需要的时候,能够随时从历史记录中找到对应的提交
在日常的使用中,强烈建议在每次commit时添加注释,说明此次提交的改动内容,便于后续的检索和查看
使用方法:git commit -m "注释内容"
例如将以上暂存区内的改动内容提交至代码仓库,可以使用如下命令:
$ git commit -m "develop: add new program test.py"
[develop (root-commit) 2776459] develop: add new program test.py
1 file changed, 1 insertion(+)
create mode 100644 test.py
如上则表明已经将变更提交至代码仓库之中了
这时,我们可以再次通过git status
命令查看暂存区中的状况
$ git status
On branch develop
nothing to commit, working tree clean
可以看到此刻暂存区中的变更已经被清除了
而为何提交文件至代码仓库中需要两步呢:
因为commit
可以一次提交很多文件,所以我们可以多次add
不同的文件
当对提交后的文件内容进行了修改之后,再次使用git status
命令可以查看到被修改的文件提示
$ git status
On branch develop
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: test.py
可以看到对于我们修改了但没有进行提交的文件会进行提醒.
同时,我们还可以通过git diff
命令判断当前文件的修改内容与已经提交内容的不同
$ git diff test.py
diff --git a/test.py b/test.py
index 665c637..2337d1d 100644
--- a/test.py
+++ b/test.py
@@ -1 +1,8 @@
-print("hello world!")
+import datetime
+
+def main():
+ print("hello world!")
+ print(datetime.time())
+
+if __name__ == '__main__':
+ main()
因此,如果我们每次对现有文件进行了修改,最好还是先查看改动区别后在决定是否提交
而每一次执行git commit
之后,git都会对提交进行记录,相关记录可以通过git log
进行查询
$ git log
commit 1a17de7d15c7e27efd7e9a448d9eeb508140264f (HEAD -> develop)
Author: test <xxx@mail.com>
Date: Sat Aug 6 12:31:46 2022 +0800
change test.py add time
commit 27764599a5b05d3b8eb69b228d40ed55a45fb78b
Author: test <xxx@mail.com>
Date: Sat Aug 6 11:39:52 2022 +0800
develop: add new program test.py
基于以上的版本变更请求,当我们想要回退到指定版本的时候,可以通过git reflog
命令产看提交的记录,并根据head
编号使用git reset --head <heah_id>
实现回退到指定版本.
执行git reflog
$ git reflog
1a17de7 (HEAD -> develop) HEAD@{0}: commit: change test.py add time
2776459 HEAD@{1}: commit (initial): develop: add new program test.py
执行 git reset --head 2776459
回退到最初的版本状况
$ git reset --hard 2776459
HEAD is now at 2776459 develop: add new program test.py
此时在查看项目仓库中的相关文件就可以回到指定版本的状态
后续如果想在回到另外的状态,也可以通过这类方法实现
- 撤销修改
如果我们在使用过程中添加了错误的文件到暂存区中,则可以根据提示使用git restore --staged <filename>
实现对文件对撤销
例如:在当前代码仓库创建了一个新的文件README
,随后使用git add .
添加到了暂存区,但是突然发现该文件存在错误,需要修改时,此时仓库的git状态如下
$ vim README
$ ls
README test.py
$ git add .
$ git status
On branch develop
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: README
这时,执行git restore --staged <file>
撤销修改
$ git restore --staged README
$ git status
On branch develop
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
可以看到此时的修改已经被撤回,我们就可以重新修改文件后重新提交了
如果提交的改动已经被git commit
提交到了工作区,则需要通过git reset --head <head_id>
的方式实现回退
- 本地文件误删除后通过git恢复
当在日常的使用过程中,如果不小心删除了本地的某些文件,需要恢复的时候,可以通过git restore <file_name>
的方式实现恢复(前提是该文件之前已经提交到了git仓库)
例如:
$ ls
README test.py
$ rm README
$ ls
test.py
$ git status
On branch develop
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: README
no changes added to commit (use "git add" and/or "git commit -a")
$ ls
test.py
$ git restore README
$ ls
README test.py