git是什么:分布式版本管理系统

初始化配置

配置用户名和邮箱

1
2
git config --global user.name "用户名"
git config --global user.email 邮箱@如QQ.com

保存用户名和密码

1
git config --global credential.helper store

查看用户名和密码,还能看ssl验证等信息

1
git config --global --list

创建仓库

这里我用命令先切换到D盘,再新建一个learn-git目录,然后切换到新建目录

1
2
3
D:
mkdir learn-git
cd learn-git

然后初始化仓库

1
git init

我这里用的终端是powershell,可以用下面命令查到隐藏的.git文件,windows用不了linux命令就很难受😅

1
ls -force

也可以直接克隆github上的仓库来创建仓库

1
git clone url

添加和管理文件

git status命令可以查看状态,如分支,master等

这里我们先创建一个file1.txt文件作为演示,并随便写点内容进去,可以直接用文件资源管理器,下面的是linux命令

1
echo "这是第一个文件" > file1.txt

查看内容

1
cat file1.txt

此时文件处于未跟踪状态,用下面命令将文件加入缓冲区(暂存区)

1
git add file1.txt

查看状态时文件会由红转绿

将暂存区文件提交至仓库,提交完之后查看状态会发现文件已经不见了

1
git commit -m "第一次提交"

-m参数是用来写提交信息的,如果没有这个参数,会默认进入vim界面写描述信息,在vim中i键进入编辑模式,esc退出编辑模式,:wq保存文件只会提交暂存区文件,工作区文件不会提交

小技巧:git命令可以使用通配符一次性提交,如git add *.txt一次性添加所有txt文件 git add . 添加当前文件夹 能不能结合更多正则表达式看看后期能不能发现更多用法

1
git log

此命令可以查看提交日志

回退版本

git reset --soft

回退版本并保留工作区和暂存区的内容

git reset --hard

回退版本并丢弃工作区和暂存区内容

git reset --mixed

回退版本并丢弃暂存区内容保留工作区内容,此命令为git reset的默认命令

使用时在参数后面加上要返回的版本id,在日志可以查看版本id

git diff查看差异

修改之前的file1.txt文件会并输入git diff会返回以下信息

1
2
3
4
5
6
7
8
9
diff --git a/file1.txt b/file1.txt
index e1cfd5c..a81b9ed 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1 @@
-这是第一个文件
\ No newline at end of file
+这是第一个文件,修改
\ No newline at end of file

此时内容还没有添加到暂存区,使用git add.添加

git rm 删除文件

正常可以用系统命令删除本地工作区文件再添加到暂存区,再提交,但这太麻烦了,用git rm可以直接删除工作区和暂存区的文件,然后再用git commit提交

.gitignore文件

把不想提交到版本库的文件名添加至.gitignore文件就不会出现在版本库

在vscode中使用git

这个是真方便,也是我现在用的最多的,配置完ssh key,关联上远程仓库后,进入vscode的源代码管理界面,点提交就能commit到版本库,同步推送就是同步到github,用vscode查看差异也比git diff直观

分支操作

git branch用于创建新的分支,现在默认分支是main,原本是master,听说涉及到种族歧视,所以改了🤦‍♂️

git checkout切换分支,此命令也能恢复文件,若文件名和分支名一样可能出现歧义,所以有了git switch命令专门用于切换分支

git merge branch-name合并分支

git branch -d branch-name删除已合并分支

git branch -D branch-name强制删除分支

解决合并冲突

若同一位置,不同分支进行了不同修改合并时就会发生冲突,手动进行修改再提交就行

git rebase

将分支嫁接的意思

如在main分支使用git rebase dev命令就是将main分支变基到dev分支上,最后的结果都是一条直线,而之前的git merge命令只是合并,没有变基

git flow工作流模型

  • main:主线

  • hotfix:bug修复

  • release:版本发布

  • develop:开发分支