参考链接:

https://mp.weixin.qq.com/s?__biz=MzIxMTUzNzM5Ng==&mid=2247493200&idx=2&sn=6a69bf9e575a77edca3c15e70d7e0a34&scene=21#wechat_redirect

极简版

设置本地Git走代理

在Git bash中输入下列命令(Clash默认端口是7890)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//设置全局代理
//http
git config --global https.proxy http://127.0.0.1:7890
//https
git config --global https.proxy https://127.0.0.1:7890

// socks
git config --global http.proxy socks5://127.0.0.1:7891
git config --global https.proxy socks5://127.0.0.1:7891

//只对github.com使用代理,其他仓库不走代理
git config --global http.https://github.com.proxy socks5://127.0.0.1:7891
git config --global https.https://github.com.proxy socks5://127.0.0.1:7891
//取消github代理
git config --global --unset http.https://github.com.proxy
git config --global --unset https.https://github.com.proxy

//取消全局代理
git config --global --unset http.proxy
git config --global --unset https.proxy

拉取远程仓库

新建一个文件夹,用于存储仓库,用下列命令拉取远程仓库:

1
git clone https://你的仓库名称

拉取之后,本地会出现一个文件夹,即远程的仓库。

做修改

在本地做修改。

首先,用下列命令进入仓库:

1
cd 你的仓库名称

然后初始化:

1
git init

接下来就可以修改本地仓库了。

提交修改

提交修改到暂存区

1
2
3
4
# 提交修改单个文件
git add "你的文件名"
# 提交所有修改到暂存区
git add .

提交修改到版本库

1
git commit "你的提交信息"

推送到远程仓库

origin 是 Git 中远程仓库的默认名称。通常,当你克隆一个远程仓库时,Git 会自动将该远程仓库命名为 origin

可以下列命令查看当前仓库名称:

1
2
3
git remote -v


下面是推送修改到远程仓库

1
git push origin master

Git的结构

Git是一个分布式版本控制系统,它的主要结构包括工作区(Working Directory)、暂存区(Staging Area,也称为 Index 或 Cache)和版本库(Repository)。

1. 工作区(Working Directory)

这是你在本地计算机上实际操作的文件目录。当你克隆一个Git仓库时,Git会将版本库的内容提取到工作区。你在这里进行代码的编辑、删除、创建等操作。

2. 暂存区(Staging Area 或 Index)

暂存区是一个中间层,它保存你希望在下一次提交(commit)时记录的文件快照。你可以通过 git add 命令将工作区的更改放入暂存区,准备提交到版本库。暂存区帮助你组织和选择哪些更改将包含在下一个提交中。

3. 版本库(Repository)

版本库存储项目的所有历史记录,包括所有提交的快照、分支和标签等。版本库通常分为两部分:

  • 本地版本库:在本地计算机上,包含 HEAD 指针(指向当前分支的最新提交)和 .git 目录,.git 目录中保存了所有的版本信息和配置文件。
  • 远程版本库:例如在GitHub、GitLab、Bitbucket等平台上的仓库,允许多个开发者协作。

Git结构图示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+---------------------+
| 工作区 (Working Directory) |
| (文件系统中的实际文件) |
| - file1.txt |
| - file2.txt |
+----------+----------+
|
| git add
v
+---------------------+
| 暂存区 (Staging Area) |
| (索引文件) |
| - file1.txt (新版本) |
| - file2.txt (修改版) |
+----------+----------+
|
| git commit
v
+---------------------+
| 本地版本库 (Local Repository) |
| (提交历史) |
| - commit1: (file1.txt, file2.txt) |
| - commit2: (file1.txt, file2.txt) |
+----------+----------+
|
| git push
v
+---------------------+
| 远程版本库 (Remote Repository) |
| (远程服务器上的仓库) |
| - commit1: (file1.txt, file2.txt) |
| - commit2: (file1.txt, file2.txt) |
+---------------------+

工作流概述

  1. 编辑文件:在工作区中修改文件。
  2. 暂存更改:使用 git add 将更改添加到暂存区。
  3. 提交更改:使用 git commit 将暂存区的更改提交到本地版本库。
  4. 推送更改:使用 git push 将本地版本库的更改推送到远程版本库,以便其他人可以看到你的更改。

通过这个结构,Git允许开发者在本地工作、版本控制和协作开发,能够高效地管理项目的演变过程。

常用命令

创建工作版本库并且进入目录

1
2
mkdir learngit
cd learngit

初始化

1
git init

将工作区的更改放入暂存区

将某一文件的更改放入暂存区

1
git add [file]

将所有文件的更改放入暂存区

1
git add .

将暂存区的更改提交到本地版本库

1
git commit -m "[message]"

提交所有已跟踪的文件的更改到本地仓库(不需要先使用 git add

1
git commit -a -m "[message]""

查看提交的历史记录

显示从最近到最远的提交日志

1
git log

还可以用一下命令查看更为简洁的信息

1
git log --pretty=oneline

一大串数字如commit 39822faceaf91b7c546d8e886ddb55d114e5d777是提交的版本号(commit id)。

回退到上一版本

1
git reset --hard HEAD^

参数:

  • —hard/—soft/—mixed

    • hard回退到上个版本的已提交状态

    • soft回退到上个版本的未提交状态

    • mixed回退到上个版本的已添加但是未提交状态

  • HEAD^

    • HEAD当前版本的指针,表示当前版本

    • HEAD^上一个版本

    • HEAD^^上上一个版本

    • HEAD~100上100个版本

    • 39822fa 也可以直接写你的版本号,没必要写全,前几个就行

回到过去后查看未来的版本ID

1
git reflog

显示当前工作目录和暂存区的状态

1
git status

查看工作区和暂存区之间的差异

1
git diff

查看暂存区和最后提交之间的差异

1
git diff --stage

撤销某一文件的保存(适用于git add之前)

1
git checkout -- "Yourfilename.txt"

两种可能

一种是Yourfilename.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是Yourfilename.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

git checkout是用版本库的状态替换为

撤销某一文件的保存(适用于git commit之前)

1
git restore --staged <file>

从暂存区中移除指定的文件,但保留工作目录中的更改,,如果想撤销工作目录的修改,需要再用一次git checkout -- <"filename">

删除工作目录和暂存区的文件

1
git rm <filename>

如果用的是shell命令rm,只会删除本地的工作目录里面的文件,并不会影响到暂存区的文件。

使用git rm删除文件后,这个删除操作会被记录为一个更改,需要通过git commit命令提交。这意味着删除操作会被版本控制跟踪。使用git rm <filename>意味着还需要之后还要再用git commit命令(如果想彻底删除)

初始化

1
git init

初始化

1
git init

初始化

1
git init