声明:
本文是对自己学习过程的记录和总结,如果还能给你带来帮助,对我来说也是幸运的;当你发现内容有误,请你慷慨的帮我指点出来,在此感谢。
注意:
本文所演示的内容是在Windows11系统上完成的,每一步的操作都附带图片,便于参考。
一、Git的下载与安装以及配置
1.Git的下载与安装
**a.**Git下载地址:Git
**b.**点击链接进入Git官网下载界面,如图1.1所示,并点击 "Download for Windows"。

图1.1
**c.**进入新界面后,点击 "64-bit" 开始下载 ,如果你的电脑是32位,请点击 "32-bit",请参考图1.2。

图1.2
**d. **下载完成后,双击.exe可执行程序,开始Git的安装,由于安装过程只需要点击下一步即可顺利完成安装【不同版本的Git在安装过程中,有些步骤不同,但也只需默认下一步就行】;所以我将不对每个步骤进行讲解,只对部分步骤进行简单提示,安装过程请参考图1.3~1.18。

图1.3
图1.4可以选择自己的安装目录,不过要方便自己找到,后面内容会涉及这个安装路径。

图1.4
图1.5中默认勾选了 "Windows Explorer integration" ,勾选这个后,在我们后续使用中,点击鼠标右键,就可以快速选择打开Git GUI或Git Bash,这里不理解的直接保持默认即可。

图1.5

图1.6

图1.7

图1.8

图1.9

图1.10

图1.11

图1.12

图1.13

图1.14

图1.15

图1.16

图1.17
图1.18把绿色框中的钩去掉后,点击 "Finish"后,完成Git安装。

图1.18
**e. **在桌面空白出,点击鼠标右键,选择 "Open Git Bash here",如图1.19所示。

图1.19
**f. **在弹出来的窗口中输入 "git" ,按下回车键,结果如图1.20所示,代表Git成功安装。

图1.20
2.Git的配置
安装完Git,是可以正常使用的,如果后续想要向远程仓库提交项目,就必须完成下面的用户配置【全局配置】,也就是配置自己在Git中的个人信息。
**a.**也是在桌面空白处点击鼠标右键,打开 "Git Bash" ,输入以下命令,请将 "名字" 改为自己想要的名字后,按下回车键,如图1.21所示。
git config --global user.name "名字"

图1.21
** b.**完成上一步骤后,继续输入以下命令,将 "真实邮箱" 改为自己的邮箱,QQ邮箱,谷歌邮箱,微软邮箱等都是可以的,输入完成后,按下回车,如图1.22所示。
git config --global user.email "真实邮箱"

图1.22
**c.**到这里,Git的用户配置其实已经完成,如果你以后想修改这些配置也很简单,因为所有的配置都是能在本地找到对应的文件;因为马上介绍的两个文件都是隐藏文件,所以先介绍下显示隐藏文件的方法,在 "此电脑" 中点击 "查看" ,点击 "显示" ,最后点击 "隐藏的项目" ,如图1.23所示。

图1.23
**d.**现在可以看到隐藏文件后,我们去找到刚才用户配置的 "名字" 和 "邮箱"的文件,可以在C盘的用户目录的当前登录用户文件夹下找到,比如我的是"C:\Users\sq_mm" ;在目录下找到名为 ".gitconfig" 的文件 ,用记事本打开,如图1.24所示,".gitconfig" 中存放的正是刚才配置的内容,我们也可以直接在这个文件中进行Git用户配置的修改。

图1.24
**e.**除了上面的方法可以查看用户配置,还可以通过输入命令的方式查看用户配置,我们在 "Git Bash" 中输入以下命令即可查看用户配置,如图1.25所示。
git config --global --list

图1.25
**f.**上面都是用户配置的操作,下面这条命令是查看Git的系统配置,也就是Git安装时的配置,对应的配置文件也可以找到, 在Git的安装路径下的 "Git\etc" 文件夹中,名为 "gitconfig" 的文件就是系统配置文件,用记事本打开,如图1.26所示,两种查看方法看到的都是相同内容。
git config --system --list

图1.26
**g.**最后介绍一条查看Git配置的命令,如图1.27所示,这条命令可以查看Git的所有配置,也就是系统配置+用户配置 。
git config -l

图1.27
二、Git的基础理论与实践
1.Git基础理论
a.Git工作区域的组成
如图2.1所示,Git由4个工作区域组成,分别是"Workspace","Index"[也叫 "Stage"],"Repository" ,"Remote" ;其中 "Remote" 是远程工作区域,也是远程仓库,而前三个是本地工作区域,也是由前三个组成的本地仓库,各工作区域可以通过命令完成对应操作。

图2.1
"Workspace": 工作区,用于存放项目代码的地方。
"Index/Stage":暂存区,用于临时存放代码的改动,这个区域本质上只是个文件,保存即将提交到文件列表的信息。
"Repository":版本库区,用于安全存放已提交所有版本数据的位置。
"Remote":远程仓库,托管代码的服务器。
图2.2也许能更好的表示Git本地仓库的组成,因为远程仓库是独立的,我们暂时不考虑它的存在。

图2.2
上图中左上角的 "Directory" 表示本地仓库,其实也是表示本地仓库就是一个目录,就是一堆文件夹组成;从图中的布局可以看出,"Directory" = "Workspace" + ".git",所以在本地仓库中,除开.git文件夹,其余都属于 "Workspace" 的天下;看 ".git" 又由两部分组成,一部分是 "Index/Stage",另一部分是HEAD指向的本地 "Repository";所以我们可以暂时理解为 "Directory" = "Workspace" + "Index/Stage" + "Repository",也就是我们上面说的三个区域组成本地仓库。
好了,有了上面的基础,我们重新梳理本地仓库如图2.3所示:

图2.3
b.Git文件状态
Git的本质是对版本进行控制,也就是对文件的版本进行控制,使用Git对文件进行修改、或者提交等操作时,需要知道文件当前处于什么状态,不然可能会出现提交了现在不想提交的文件,或者要提交的文件却没有提交上,在Git中文件分为以下状态:
"Untracked":文件未跟踪;此文件在文件夹中,但并没有加入git库,不参与版本控制。
"Unmodify":文件已入库,并且未修改;即版本库中的文件内容与文件夹中完全一致。
"Modified":文件已修改;仅仅是修改,并没有进行其它操作。
"Staged":文件已暂存;并没有同步到本地版本库中。
"Committed":文件已提交;已提交到本地版本库,受到版本控制。
有了一定的理论知识后,在后面的实际中再慢慢体会吧。
2.Git实践
**a.**在桌面新建一个文件夹,名为 "gitcode",进入文件夹后,在文件夹空白处点击鼠标右键,进入 "Git Bash",接下来的所有操作都是基于此目录,也就是我们以当前文件夹为本地仓库;所以只有在这个文件夹下打开 "Git Bash"或者通过命令行进入此文件夹,才能完成后面正确的操作,如图2.4所示。

图2.4
**b.**接下来,我们可以开始学习新的命令,第一个是查看仓库状态的命令:
git status

图2.5
如图2.5所示,命令执行后,提示这不是一个仓库,显然,我们刚才只是自己定义这个文件夹作为仓库,而Git并没有判定这个文件夹为仓库。
**c.**第二个命令,用于初始仓库:
git init

图2.6
如图2.6所示,执行命令后,如果提示的和图片里的内容相同,则代表仓库初始化成功,这时会发现该文件夹下多了一个 ".git" 的文件夹,同样的,这也是一个隐藏文件夹,有了这个文件夹,就说明当前目录是一个Git仓库,".git"就是我们上面提到的Git管理空间;同时,在命令行最后多了一个 "master" ,这代表目前处于仓库的 "master" 分支,这个指向的分支也可以通过 ".git" 文件夹中的HEAD查看,用记事本打开HEAD,如图2.7所示:

图2.7
这也验证了理论部分的HEAD是指向当前分支。
**d.**此时,我们在 "gitcode" 文件夹下再新建一个 "hello.txt" 文件 ,注意:不是在 ".git" 文件夹下哦!并在命令窗口中使用仓库状态查看命令:

图2.8
如图2.8所示, 提示我们 "Untracked",也就是我们理论部分说的文件状态,新建的这个文件未跟踪,并提示我们使用 "git add <file>" 命令,是的,这就是需要我们马上学的命令。
**e.**第三个命令,将文件添加到暂存区,文件名跟你自己的,我的文件名是hello.txt:
git add hello.txt
当然也可以使用下面这句命令 ,下面这句是将文件夹下所有未跟踪文件都添加到暂存区:
git add .
上面两句命令二选一即可,两条都执行也不会出问题的,我直接演示两条都执行。

图2.9
当前,我们新添加的文件 "hello.txt" 已处于暂存区了,可以再次通过 "git status" 命令查看: 
图2.10
注意:此时的文件只是处于暂存区,当前文件状态也就是 "Staged"。
**f.**第四个命令,将暂存区的文件提交到本地版本库区:
git commit -m "first file"

图2.11
如图2.11所示,成功将文件提交到了本地版本库区,当前文件状态就为 "committed" ;命令中的-m代表提交信息,双引号里填入具体的提交信息,例如我表达的是:这是我提交的第一个文件。
**g.**第五个命令, 查看本地仓库的提交日志:
git log

图2.12
可以看到日志中有提交的作者名字和邮箱,以及提交的时间和提交时的提示信息。
**h.**第六个命令,查看分支:
git branch

图2.13
上图所示,当前仓库只有一个分支,*指着的就是当前所在的分支,使用以下命令会创建一个名为 "dev" 的分支,创建完成后我们再次使用 "git branch" 命令查看:
git branch dev

图2.14
如图2.14所示,我们创建了 "dev" 分支,但目前并没有指向该分支。
**i.**第七个命令,切换分支:
git checkout dev

图2.15
上图所示,我们切换分支后,使用命令 "git branch" 查看分支,看到*已经指向了 "dev",并且在命令行的最后,也从 "master" 变成了 "dev",此时,我们再次使用记事本打开 ".git" 文件夹下的HEAD文件,也可以看到指向的分支变了,如图2.16所示:

图2.16
最后,再介绍下分支的删除,也是第六个命令的衍生:
git branch -d dev
-d 表示删除分支,dev 表示分支名;如果把 -d 更换为 -D 就表示强制删除,如下命令:
git branch -D dev

图2.17
如上图所示,我们使用了删除分支,以及强制删除分支都失败了,原因是我们当前正处于这个要被删除的分支上,从命令行最后的 "dev" 就可以看出,也可以通过前面介绍的分支查看等方式看到;所以,我们需要先切换到其它分支后,再来删除 "dev" 分支,使用命令 "git checkout master" 切换到 "master" 分支,再执行刚才的删除命令,最后再查看分支,如图2.18所示:

图2.18
如上图所示,我们已经成功删除了分支;通过这一部分的实践,我们对Git的基础命令使用的应该也比较熟练了,也大概明白了把项目提交的本地版本库的流程,我们最后来列出来:
*****在工作空间中添加或者是修改了文件。
**把需要进行版本管理的文件都放入到暂存区。 使用命令:git add .*
**将暂存区的文件提交到本地版本库。 使用命令:git commit -m "提示信息内容"*
其实到这里,在本地仓库的操作就基本完成了,接下来将介绍本地仓库与远程仓库的交互。
三、本地与远程仓库交互
在进行本地与远程仓库进行交互前,我们还需要完成一个准备工作,在前面的学习中可以注意到,我们只对Git进行了本地的一些配置,对Git仓库的学习也一直停留在本地仓库;而需要注意的是,本地仓库并非直接关联了一个远程仓库,而是我们通过一定的方式,让Git本地仓库与某个或多个远程仓库建立联系,只有完成这个操作,我们本地仓库的项目才能提交到远程仓库中。
远程仓库有很多,我们使用的最多的例如:Github、码云等,接下来我们以Github远程仓库为例进行学习,其它远程仓库的使用也是大同小异;这里的前提是,你已经完成了Github账号的注册,能成功登录到Github的主页面。
1.使用SSH完成Git与Github的绑定
在这里提示一下,如果不绑定,只是没办法完成Git本地仓库向远程仓库提交代码,但不影响从远程仓库下载代码,也就是说,不完成这步,也是可以进行这部分第3小节的操作的。
在Github远程仓库上,一般都是通过SSH(安全外壳协议)来进行授权的,目的就是通过SSH协议让Git与Github建立通信,或者理解为你的计算机与Github建立通信,大家在遵守同一个协议的前提下,完成数据的传输。
a.第一步:生成SSH key
首先我们需要查看本机有没有安装SSH,因为在Windows中是没有默认安装的,但是我们前面在进行Git的安装时,只有默认选择安装了Git Bash,那么SSH也会被一起安装的,那么我们在Git Bash中输入ssh进行查看,如图3.1所示。 
图3.1
如上图所示,代表已经安装了ssh。
接下来在窗口中输入以下命令,在这个过程中根据提示按3次回车,最后生成密钥:
ssh-keygen -t rsa

图3.2
如图3.2所示,成功生成密钥 ,命令中的 -t 是表示选择算法,rsa是算法名字,所以整个命令就是用rsa算法生成密钥。
密钥生成后我们可以通过路径 "C:\Users\当前登录用户名.ssh" 找到,需要注意的是.ssh是隐藏文件,在.ssh文件中,有两个文件,id_rsa是私钥、id_rsa_pub是公钥,如图3.3所示。

图3.3
b.第二步:在Github中添加SSH key
在登录了Github的前提下,首先在Github主页面点击右上角头像,在弹出的列表中选择 "Settings" 选项,如图3.4所示。

图3.4
在 "Settings" 界面选择 "SSH and GPG keys",如图3.5所示:

图3.5
在新的界面中点击右上角的 "New SSH key",这里我原本就有一个密钥了,这是另外一台电脑的密钥,不用管,所以我们继续点 "New SSH key" 即可,如图3.6所示。

图3.6
此时,我们把 ".ssh" 文件夹中的 id_rsa_pub 公钥里的内容,复制到如图3.7所示的Key下面内容框里,复制完成后,再点击下面的 "Add SSH key" 按钮。

图3.7
紧接着,需要我们输入Github的登录密码进行验证,如图3.8所示。

图3.8
然后,你就会发现我们成功添加了一个key,如图3.9所示。

图3.9
** c.第三步:**验证Git与Github是否成功建立通信
在 Git Bash 窗口中输入下面命令,并按提示输入 yes 后,按下回车键后,如图3.10所示:
ssh -T [email protected]

图3.10
如上图所示,最后提示 "Hi xxxxx! You've successfully xxxx " 则表示已成功。
2.Github新建仓库
为了方便演示从Github远程仓库上下载代码和从本地仓库上传代码到Github远程仓库,我们先在Github上新建一个仓库。
**a.**先回到登陆后的Github主页面,点击小箭头,从展开的列表中选择 "New repository",如图3.11所示。

图3.11
**b.**在创建仓库界面,设置想要的仓库名字 "gitTest",勾选上 "Add a README file" 后,仓库里会自动生成一个文件,最后点击 "Create repository" ,如图3.12所示。 
图3.12
创建成功后,自动进入此项目仓库的主页面,如图3.13所示。

图3.13
3.从Github下载仓库
**a.**从Github上下载项目可以通过点击 "Code" ,再点击下面箭头所指的图标复制地址,当然也可以直接点击最下面的 "Download ZIP" 下载压缩包,我们这里介绍复制地址的方法,如图3.14所示。

图3.14
** b.**复制了地址后,我们在桌面打开 Git Bash,输入下面命令,并在命令后面粘贴上刚才的地址,地址与前面命令直接有一个空格,如图3.15所示。
git clone [email protected]:MmlSQ/gitTest.git

图3.15
命令 "git clone 地址" 是从指定的地址下载项目代码,上图所示,执行指令并下载完成后,桌面会多一个与Github远程仓库项目名相同的文件夹,文件夹里的内容也与Github相同,并且文件夹里有 ".git" 文件,说明下载下来后,这个文件夹就已经是一个本地仓库了。
4.上传代码到Github仓库
**a.**我们在刚下载的 "gitTest" 本地仓库里添加一个 "hello.txt" 文件,并在 "gitTest" 文件夹中新打开 Git Bash,如图3.16所示。

图3.16
b. 此时使用查看仓库状态命令:
git status

图3.17
如上图所示,新建的 "hello.txt" 文件处于 "Untracked" 状态。
**c.**接着使用下面命令,将新文件添加到暂存区,并再次查看仓库状态:
git add .

图3.18
如上图所示,已成功将 "hello.txt" 添加到了暂存区,文件状态处于 "Staged"。
**d.**接着使用下面命令,把暂存区的文件提交到本地版本库中,并再次查看仓库状态:
git commit -m "gitTset first file"

图3.19
如上图所示,成功将 "hello.txt" 提交到了本地版本库中,文件状态处于 "committed"。
此时已经完成了本地仓库的提交,我们只需最后一步把本地仓库的新文件上传到远程仓库即可,但是我们注意到,前面我们进行了Git的本地配置,然后又把Git与Github建立了通信,但是怎么才能把本地仓库代码上传到指定的 "gitTest" 远程仓库项目中呢?因为我们在Github中肯定不止这个项目。
**e.**因为我们桌面的这个 "gitTest" 本地仓库是直接从Github完整下载下来的,所以已经给我们关联了具体远程仓库的名字,我们当前只需要通过下面命令查看远程仓库名字即可,至于手动建立关联将在后面第5小节讲。
git remote

图3.20
从上图可以知道,我们的 "gitTest" 远程仓库名为 origin。
**f.**所以我们最后一步,将 "hello.txt" 文件提交到远程仓库 origin,命令如下:
git push origin main

图3.21
命令 "git push 远程仓库名 分支",可以看到远程仓库名为 "origin" ,分支为 "main",因为当前仓库只有一个分支,而且名字是 "main",可以从命令行的最后看出,也可以通过使用 "git branch" 命令查看;如上图所示,则代表已成功上传远程仓库,我们刷新远程仓库,如图3.22所示。

图3.22
可以看到,我们新上传的 "hello.txt" 已经在Github远程仓库中了。
5.手动建立与远程仓库的关联
前面第3、4小节介绍了直接 "git clone" 远程仓库,下载下来后,本地仓库自动与远程仓库建立了关联,并且可以通过 "git remote" 查看远程仓库名字,那么如何手动建立关联呢?
**a.**首先在桌面创建一个新文件夹 "gitws" ,并在文件夹中打开 Git Bash,最后初始化Git本地仓库。

图3.23
**b.**关联 "gitws" 本地仓库与Github的 "gitTest" 远程仓库,使用如下命令:
git remote add gittest [email protected]:MmlSQ/gitTest.git
命令中的 "gittest" 是我们给远程仓库自定义的名字,而后面跟的是远程仓库的地址,地址如图3.24所示:

图3.24

图3.25
如图3.25所示,创建关联后,我们并使用命令 "git remote" 查看远程仓库名字。
**c.**接着使用下面命令,将远程仓库内容同步到本地仓库:
git pull gittest HEAD

图3.26
命令 "git pull 远程仓库名 本地分支" 是拉取远程仓库的文件到本地仓库的指定分支里,因为HEAD指定的是本地仓库当前所选分支;如图3.26所示,成功将远程仓库的内容下载到了本地仓库。
**d.**在 "gitws" 本地仓库中修改README.md的内容,例如图3.27所示:

图3.27
**e.**将已修改的内容添加到暂存区,并提交到本地版本库:
git add .
git commit -m "modify README.md"

图3.28
**f.**最后上传远程仓库:
git push gittest master

图 3.29
上图所示,表示上传成功,这时,我们去康康远程仓库的内容,如图3.30所示;诶,等等,怎么不对呢,明明有提示上传,怎么没有修改呢?

图3.30
点开 "main" 旁边的箭头,发现多了一个 "master" 分支,原来我们刚才在本地仓库使用的是master分支,上传远程仓库时,远程仓库原本只有main分支,为了使远程与本地仓库分支同步,就又新建了一个master分支。
由于分支这部分的内容很多,暂时不展开来讲,如何解决当前的问题呢?
**g.**在Git Bash中输入以下命令,创建并切换到main分支:
git checkout -b main
再执行合并分支命令,表示把master分支合并到main主分支上:
git merge master

图3.31
如图所示,已经合并完成,假设我们在本地仓库和远程仓库都不想要master分支,只想保留一个main分支。
**h.**删除本地分支命令:
git branch -d master

图3.32
删除后我们查看本地分支,只有一个main分支了。
**i. **删除远程仓库分支命令:
git push gittest --delete master
命令中的 "gittest" 是远程仓库名,master是要删除的分支。

图3.33
如上图所示,远程仓库的master分支已经被删除了。
**j. **此时再重新上传远程仓库,使用以下命令:
git push gittest main

图3.34
如上图所示,上传成功后,Github远程仓库也更新了对应内容,并且master分支已经删除。
到这里,GIt在Windows上的安装和基本使用已介绍完了。
参考:
【1】:还不会使用 GitHub ? GitHub 教程来了!万字图文详解 - 知乎 (zhihu.com)
【2】:【狂神说Java】Git最新教程通俗易懂_哔哩哔哩_bilibili
版权归原作者 牛油果伴酸奶 所有, 如有侵权,请联系我们删除。