一、Git的概述

Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。

Git 会跟踪我们对文件所做的更改,因此我们可以记录已完成的工作,并且可以在需要时恢复到特定或以前的版本。Git 还使多人协作变得更加容易,允许将多个人的更改全部合并到一个源中。

二、Git的常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m “日志信息” 文件名提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

2.1.设置用户签名

用法

git config --global user.name 用户名 
git config --global user.email 邮箱

在这里插入图片描述

在这里插入图片描述

说明:“
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。注意: 这里设置用户签名和将来登录 GitHub(或其他代码托管中心) 的账号没有任何关系。“

设置完成之后会在对应的用户下存在.gitconfig文件

2.2.初始化本地库

2.2.1.基本语法
git init

在这里插入图片描述

执行完成之后会出现.git文件,初始化成功

在这里插入图片描述

2.2.查看本地库状态
git status

在这里插入图片描述

2.3.添加暂存区

本地修改完的文件,需要添加到暂存区才可以提交本地仓库。

git add 文件名
或者
git add .

在这里插入图片描述

删除暂存区内容

git restore --staged 文件名
git rm --cached  文件名   (这是比较旧的命令)
区别:
git restore 恢复我此次的修改,我此次的修改不提交
git rm 是删除文件,就是本来仓库中已经有了这个文件,但是我把他删除

git restore --staged 文件名 : 将文件从暂存区撤出,但不会撤销文件的更改(我修改了文件,已经放到暂存区了,现在我不想将这次修改放到暂存区,可以使用 这个命令)
git restore 文件名 :将在工作区中的修改丢弃(需要被追踪,也就是也就被版本控制的文件才可以使用git restore命令

比如我已经把这个文件删掉了,那么我就可以使用这个命令放弃这个删除,但是如果我已经将删掉这个文件并且提交到暂存区之后,那么我需要先执行git restore --staged 文件名之后才可以执行这个命令)

git rm --cached命令与git rm命令都可以删除git版本库中的文件,但是两者之间有一些区别。

使用git rm -f 文件名 命令会将文件从版本库中删除,并且同时删除工作区中对应的文件。而使用git rm --cached 文件名命令会将文件从版本库中删除,但是不删除工作区中的对应文件。

1.git rm 会删除工作区中的文件;
2.git rm 会同时将删除的文件添加到暂存区;
【因此 git rm 相当于 rm + git add 两个命令】
【注意】 git rm 删除的文件必须是 没有经过修改的,也就是说必须要和当前版本库的内容一致的。
3.git commit 后,版本库中的此文件记录也会被删除。
如果git rm 文件  删除的文件和上一个版本库内容不一致,那么要执行删除,则会出现报错。
这时可以使用git rm -f 文件 进行强制删除
.git rm --cached 会删除暂存区中的文件,但是会保留工作区中的文件,并将此次删除提交到暂存区;
2.因此:文件从暂存区中删除掉,即不会被提交到版本库中,也就是说此文件被取消了版本控制。
3.注意 : --cached 参数 删除的文件必须是已经被追踪的文件,即之前被版本控制的文件
向暂存区告知本文件已经删除,但工作区却偷偷保留这个文件。于是commit后仓库就不会有这个文件,是为了用户本次不想上传某些缓存文件设立。

在这里插入图片描述

2.4.提交本地库
git commit -m "日志信息"

在这里插入图片描述

2.5.历史版本

查看提交记录

git reflog

git log

在这里插入图片描述

git reset --hard 版本号

穿越回对应的版本号

在这里插入图片描述

Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示。
在这里插入图片描述

指针指向对应的版本。

三、GIT分支操作

3.1.什么是分支

在这里插入图片描述

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。分支可以简单理解为副本,一个分支就是个单独的副本。(分支底层其实也是指针的引用)

在这里插入图片描述

3.2.分支的好处

同时并行推进多个功能开发,提高开发效率。

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败
的分支删除重新开始即可。

3.3.分支的操作

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上
3.3.1.查看分支
git branch -v	

在这里插入图片描述

3.3.2.创建分支
git branch 分支名	

在这里插入图片描述

3.3.3.切换分支
git checkout 分支名

在这里插入图片描述

3.3.4.合并分支
git merge 分支名

正常合并情况(没有出现冲突)
在这里插入图片描述

出现冲突情况进行合并

产生冲突原因:

合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。“查看状态(检测到有文件有两处修改)“

在这里插入图片描述

在这里插入图片描述

这时需要手动进行合并分支

  • 打开冲突文件

在这里插入图片描述

修改前:

在这里插入图片描述

修改后

在这里插入图片描述

保存之后添加暂存区

git add test4.txt

提交版本库

git commit -m "日志信息"  (此时不能带文件名)

在这里插入图片描述

master、fix-bug 其实都是指向具体版本记录的指针当前所在的分支,其实是由 HEAD决定的。所以创建分支的本质就是多创建一个指针。“
HEAD 如果指向 master,那么我们现在就在 master 分支上。“HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。“所以切换分支的本质就是移动 HEAD 指针。

3.3.5.创建并切换分支
git checkout -b 分支名 // 新建  分支,并切换到该分支上

在这里插入图片描述

3.3.6.删除分支

当之前创建的分支,完成了它的使命,如 Bug 修复完,分支合并以后,这个分支就不在需要了,就可以删除它。

git branch -d 分支名 // 删除  分支

在这里插入图片描述

四、GIT团队协作机制

4.1.团队内协作

在这里插入图片描述

4.2.跨团队协作

在这里插入图片描述

五、GitHub操作

5.1.远程仓库操作

命令名称作用
git remote -v查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名 分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

5.2.创建远程仓库

使用github或者gitee

在这里插入图片描述

5.2.1.创建远程仓库别名
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2.2.添加远程仓库

如果你已经有了一个本地仓库,然后你打算将它发布到远程,供其他人协作。那么使用:

git remote add origin your_remote_git_repo // 为本地仓库添加远程仓库

在这里插入图片描述

5.2.3.移除当前远程仓库
git remote rm origin //先移除之前的远程仓库

在这里插入图片描述

5.3.推送本地分支到远程仓库

git push 别名 分支
或
git push 远程仓库地址 分支

如果出现

fatal: refusing to merge unrelated histories
致命:拒绝合并不相关的历史记录
这是因为本地仓库与远程仓库存在不同的历史记录(不是同一个仓库)
解决方法:
在你操作命令后面加 --allow-unrelated-histories
如git pull 远程仓库地址 分支名 --allow-unrelated-histories

在这里插入图片描述

推送远程仓库

在这里插入图片描述

5.4.拉取远程库到本地库

git pull 别名 分支名
或
git pull 远程仓库地址 分支名
或
git fetch 别名 master

git fetchgit pull 之间的区别:

  • git fetch 是仅仅获取远程仓库的更新内容,并不会自动做合并。

  • git pull 在获取远程仓库的内容后,会自动做合并,可以看成 git fetch 之后 git merge

  • 注意:建议多使用 git fetch

在这里插入图片描述

5.5.克隆远程仓库到本地

git clone 远程仓库地址(克隆公开代码不需要登录)

在这里插入图片描述

git clone 克隆会做三件事

  • 拉去远程代码
  • 初始化本地仓库
  • 创建别名origin

六、SSH免密登录

在对应运用命令生成.ssh密钥目录

ssh-keygen -t rsa -C 892640297@qq.com

在这里插入图片描述

在这里插入图片描述

生成.ssh文件

在这里插入图片描述

在gitee或者github上将公钥输入

在这里插入图片描述

之后就可以使用ssh进行项目的拉取以及推送。

七、自建代码托管平台-GitLab

官网地址:https://about.gitlab.com/

安装说明:https://about.gitlab.com/installation/

八、Git可能需要用到的命令

8.1.查看仓库中的具体修改

git diff    // 查看版本库中所有的改动
git diff Readme.md        // 查看具体文件的改动

很经常的,我们对某个文件做了修改,但过不久就忘记了。这时候就可以通过 git diff 来查看具体的修改内容。

在这里插入图片描述

8.2.版本回退

有了 git reflog 来查看提交的历史记录,我们就可以通过 git reset --hard 来回退到我们需要的特定版本,然后使用当时的代码进行各种操作。

git reset --hard HEAD^        // 回退到上一个提交版本
git reset --hard HEAD^^        // 回退到上上一个提交版本
git reset --hard 'commit_id'    // 会退到 commit_id 指定的提交版本

在这里插入图片描述

8.3.撤销修改

撤销修改同样包括两方面的内容,由于仓库中的文件在提交之前,可能在工作区中,尚未在版本控制范围内,也可能在暂存区中。

8.3.1.丢弃工作区中文件的修改
git checkout -- Readme.md    // 如果 Readme.md 文件在工作区,则丢弃其修改
git checkout -- .            // 丢弃当前目录下所有工作区中文件的修改

注意: git checkout -- 中的 -- 是必须的。

在这里插入图片描述

8.3.2.丢弃已经进入暂存区的修改
git reset HEAD Readme.md // 将 Readme.md 恢复到 HEAD 提交版本的状态
git reset HEAD 文件名 // 将 文件 恢复到 HEAD 提交版本的状态

在这里插入图片描述

8.4.建立本地分支和远程分支的关联

在本地仓库中的分支和远程仓库中的分支是对应的。一般情况下,远程仓库中的分支名称和本地仓库中的分支名称是一致的。

有的时候,我们会需要指定本地分支与远程分支的关联。

git branch --set-upstream-to=origin/远程分支名 本地分支名

在这里插入图片描述

在zkt-git-test上的hello.txt文件中加入zkt-git-test之后,重新拉去,显示如下

在这里插入图片描述

git branch --set-upstream 'local_branch' origin/remote_branch
显示不再支持
--set-upstream已经过时,需要用 新的命令 --set-upstream-to

在这里插入图片描述

8.5.修改本地仓库对应的远程仓库地址

当远程的仓库地址发生变化时,需要修改本地仓库对应的远程仓库的地址。主要应用在[工程迁移]过程中。

git remote set-url origin 远程仓库地址

在这里插入图片描述

8.6.标签管理

在项目开发过程中,当一个版本发布完成时,是需要对代码打上标签,便于后续检索。获取处于其他的原因,需要对某个提交打上特定的标签。

8.6.1.创建标签
git tag -a 标签名 -m '备注信息' 'commit_id'

-a 参数指定标签名, -m 添加备注信息, ‘commit_id’ 指定打标签的提交(某个版本号)。

8.6.2.查看所有标签
git tag // 查看本地仓库中的所有标签
8.6.3.查看具体标签信息
git show 标签名

在这里插入图片描述

8.6.4.删除本地标签

如果打的标签出错,或者不在需要某个标签,则可以删除它。

git tag -d 标签名

在这里插入图片描述

8.6.5.推送标签到远程仓库

打完标签以后,有需要推送到远程仓库。

//推送单个标签到远程仓库
git push origin 标签名
//一次性推送所有标签到远程仓库。
git push origin --tags

在这里插入图片描述

8.6.6.删除远程标签
git push origin :refs/tags/标签名
 
git push origin --delete 标签名
 
git push origin :标签名

在这里插入图片描述

8.7.临时保存修改

在执行很多的 Git 操作的时候,是需要保持当前操作的仓库/分支处于 clean 状态,及没有未提交的修改。如 git pull, git merge 等等,如果有未提交的修改,这些将无法操作。

但是做这些事情的时候,你可能修改了比较多的代码,却又不想丢弃它。那么,你需要把这些修改临时保存起来,这就需要用到 git stash。

8.7.1.临时保存修改

临时保存修改,这样仓库就可以回到 clean 状态。

git stash // 保存本地仓库中的临时修改。

注意:可以多次的 git stash 来保存不同的临时修改。
在这里插入图片描述

保存之后,仓库回到clean状态,目前在工作区、暂存区的已经没有了,被暂时保存起来了。

8.7.2.查看临时保存

当你临时保存以后,后面还是要取回来的,那它们在哪里呢?

git stash list // 显示所有临时修改

在这里插入图片描述

8.7.3.恢复临时保存

当我们处理完其他操作时,想要恢复临时保存的修改。

git stash apply        // 恢复所有保存的临时修改
git stash pop        // 恢复最近一次保存的临时修改

在这里插入图片描述

8.7.4.丢弃临时保存

我们后面觉得临时保存不想要了,那可以丢弃它。

git stash clear // 丢弃所有保存的临时修改

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐