Git分布式控制工具的使用

一、介绍

今天学习了Git,为了以后更方便的管理自己的项目代码以及使用相关的开源网站(github、gitlab、码云…)。众所周知,Git是一个免费的、开源的分布式项目管理工具。开发人员在开发系统时经常使用Git管理项目代码,主要使用Git解决下面几个实际问题:
1.协同开发
2.代码还原
3.代码备份
4.追溯问题代码的责任人

二、Git常用命令总结

1.设置用户信息

#设置用户名
git config --global user.name "username"
#设置用户名
git config --global user.email "useremail"

顾名思义,上面两句命令行负责设置用户信息,命令行中双引号表示的内容为:
username” 是你设置的用户名,
user-email” 是你设置的用户邮箱。

2.设置常用指令别名

① 打开用户目录,创建 .bashrc 文件

touch .bashrc

② 在.bashrc文件中设置指令的简易别名

#用于输出git提交日志 
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' 
#用于输出当前目录所有文件及基本信息 
alias ll='ls -al'

③ 打开gitBashrc 以下命令 ~ 表示gitBash的根目录,source是执行文件的命令

source ~/.bashrc

3.解决GitBash乱码问题

① 打开GitBash执行下面命令

git config --global core.quotepath false

② 找到{git_home}/etc/bash.bashrc 文件最后加入下面两行,{git_home}是安装Gitbash的根目录

export LANG="zh_CN.UTF-8" 
export LC_ALL="zh_CN.UTF-8"

4.创建本地仓库

①在本地电脑新建一个文件夹,作为本地的Git仓库。
②进入这个目录中,点击右键打开Git bash窗口。
③执行 “git init” 命令,"git init"作用是初始化当前目录作为git仓库。

git init

④创建成功后,可以在当前目录下看到 “.git” 目录。

5.Git的基础操作指令

在了解Git基础操作之前,先要了解一下Git对于文件修改存在的几个状态。
在这里插入图片描述
使用Git管理的文件,不同状态的文件的文件会存在不同的区域中,有以下三个区域:

工作区 :未暂存和未跟踪状态这两种状态的文件存放在工作区,开发者在工作区编写程序,编写好的程序文件可以提交到暂存区。
暂存区:处于暂存状态的文件可以提交到仓库,每次向仓库提交的是所有暂存区的文件。
仓库:已提交状态的文件保存到仓库中,所有的开发人员都可以将仓库中的文件拉取到自己的本地仓库。

5.1 控制文件的状态

1.查看修改的状态

git status

2.将工作区的文件添加到暂存区
命令形式: git add 单个文件名 | 通配符
下面命令中 “.” 表示工作区中的所有文件,也可以直接跟文件名,那个文件就是要提交的文件。

git add .

3.提交暂存区到本地仓库

git commit -m "这里的内容可作为备注,写你当前提交的文件所做的操作"

4.查看提交日志
命令行形式: git log [option]
options:
–all 显示所有分支
–pretty=oneline 将提交信息显示为一行
–abbrev-commit 使得输出的commitId更简短
–graph 以图的形式显示
2.2小节中为上述的日志参数设置了别名为log-git,也就是说log-git等价于上述所有参数命令的组合,可以根据自己的喜好来配置相关参数。

5.版本回退

**作用:**切换仓库中提交文件的版本,目的是防止向仓库中提交错误版本的代码。例如:当前有一个开发者向仓库中提交了一个错误版本的代码,可以利用版本切换功能,将当前仓库中的代码版本切换回上次正确的提交版本。
具体流程如下:

①查看提交操作的 commitID

每次对仓库进行提交操作时,Git都会给这个操作赋一个commitID, 代表这一操作的唯一标识。执行"git-log" 或者"git log" ,可以查看提交日志。如下图所示:
在这里插入图片描述
查看已删除记录
如果日志记录被删除,可以使用如下命令来查看已经删除的记录。

git reglog

②版本切换命令形式
下面命令行中,“commitID” 是每一次提交操作的ID标识符,填写最近一次正确版本的commitID即可将仓库中的代码还原到上一次正确的版本。

git reset --hard commitID

6.添加文件至忽略列表
一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动
生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:
在这里插入图片描述
在上图中,".gitignore"文件中的内容为: .a, 表示
所有后缀名为“.a”的文件都不被Git仓库管理

注意: .gitignore文件只能解决未被追踪的文件,如果已经被git追踪的文件,需要删除其追踪状态。

删除文件追踪状态

git rm --cached 文件名称
5.2 分支

分支的作用:分支主要用来解决协同开发的问题,可以给项目中每一个开发者创建一个分支,所有分支编写的代码最终都提交到master(一般都叫这个名称,这个分支作为仓库使用)分支中,也从master分支中拉取或抓取代码。 这样,项目中的每一个开发者都可以及时将自己的代码提交到仓库,而其他开发者可以从仓库中将更新的代码拉取到自身的本地仓库。每一个开发者都可以及时掌握项目的最新版本代码,在自己电脑上的本地仓库进行开发调试,开发完自己相应的功能,再将相应代码提交到仓库中,与其他开发者共享,达到协同开发的目的。

也可以理解成每一个开发者的电脑,都可以作为一个服务器,运行项目中所有开发者提交到仓库中的代码,这种分布式管理的好处是可以使开发者按照自己的开发进度开发,有效避免对其他开发者的影响。

1.创建本地分支
下面命令中 "branchname"是创建的分支名称,可自己起。

git branch branchname

2.查看本地分支

git branch

3.切换分支
下面命令行中,"branchname"是想要切换的分支名称

git checkout branchname

以直接切换到一个不存在的分支(创建并切换)

git checkout -b 分支名

4.合并分支
可以将一个分支上的提交合并到另一个分支,先登录合并的原分支,然后运行下面命令行,合并目标分支。
branchname 是目标分支的名称

git merge branchname

5.删除分支
①参数为 “-d”, 删除分支时,需要做各种检查

git branch -d branchname

②参数为“-D",不做任何检查,直接强制删除

git branch -D b1

6.解决分支冲突
发生冲突的场景: 两个分支同时修改同一文件同一行的内容,将两个分支合并到一起时,会发生冲突,git会将两个分支修改的内容全部保留,留给开发者决定保留那个分支修改的内容。下图是产生冲突的文件,<<<<<<<<<HEAD至========是当前分支修改的内容,=========至>>>>>>>>>dev01是分支dev01修改的内容。

在这里插入图片描述
解决方法
① 删除起冲突的文件中要弃用的内容。
在这里插入图片描述
② 将文件重新添加至暂存区,并重新提交。
在这里插入图片描述

三、使用远程仓库

Git可以链接远程仓库,将开发好的代码推到远程仓库,并可随时将远程的仓库代码拉取到本地仓库,进行协同开发。
比较常用的远程仓库有:
github : https://github.com/
码云: https://gitee.com/
GitLab: https://about.gitlab.com/
本节以链接码云为例,演示链接远程仓库以及代码管理的过程。

1.创建远程仓库

在码云( https://gitee.com/signup)上创建一个远程仓库,名为"show_git_operation"。
在这里插入图片描述
创建好远程仓库之后,下图中的SSH是该远程仓库的地址,将其复制下来
在这里插入图片描述

2.操作远程仓库

①链接远程仓库

  • 第一次链接
    如果是第一次链接,可以尝试配置SSH公钥,方便下次直接链接,不需要每次链接都输入码云的密码。
    配置SSH公钥
    I.在本地仓库执行下列命令,生成SSH公钥,如果公钥已经存在,则覆盖
ssh-keygen -t rsa

II.Gitee设置账户共公钥
在本地仓库输入以下命令,获取SSH公钥

cat ~/.ssh/id_rsa.pub

下图是公钥内容,选中即复制
在这里插入图片描述

将公钥复制到码云上,点击确定
在这里插入图片描述
在本地仓库中输入以下命令,查看是否配置成功

ssh -T git@gitee.com
  • 非第一次链接

    如果第一次已经配置好SSH了,直接执行以下操作链接就好。先初始化本地仓库(在上文2.1~2.4小节已经分析了如何初始化本地仓库)------》再将本地与远程仓库进行连接。链接命令如下:

git remote add origin https://gitee.com/ma-haokainb/show_git_operation.git

上面的命令行中,"git remote add"是链接远程仓库命令,"origin"是给链接的这个远程仓库起的别名。最后面是这个远程仓库的地址。

②查看连接到的远程仓库

git remote

在这里插入图片描述
上图显示的结果是当前本地仓库链接的两个远程仓库。

③将本地仓库中的内容推送到远程仓库

a.命令行参数解释
命令形式:git push [-f] [–set-upstream] [远端名称 [本地分支名][:远端分支名] ]

  • git push 是基本的推送命令

  • -f 表示强制覆盖,不管推送的内容有没有冲突。

  • set-upstream 推送到远端的同时并且建立起和远端分支的关联关系(git push --set-upstream origin master),建立联系以后,再次向远程仓库推送代码,只需要直接运行"git push"命令即可将代码推送到相关的远程仓库文件。

  • 如果当前分支已经和远端分支关联,可以省略分支名和远端名。(git push 将master分支推送到已关联的远端分支)

    例:git push --set-upstream origin master :master
    上例的命令就是将本地的master (第一个master)分支,推送到远端名为origin的远程仓库中一个master第二个master分支上,并且与之建立关联,下次推送代码只需要执行“git push"指令即可。

b.演示将本地仓库的文件推送到远程仓库
在本地仓库执行下面命令,将本地master分支中的内容,推送到远端为"origin1"的"master"仓库中,并建立关联。

git push --set-upstream origin1 master

下图显示的是本地仓库执行完该命令的结果,显示已经完成本地仓库到远程仓库的推送。在这里插入图片描述
成功完成推送后,查看远程仓库内容是否更新。
在这里插入图片描述
上图是刚刚创建的远程仓库,可以看到本地仓库成功将本地文件推送到远程仓库中了。

④查看本地分支与远程分支的联系

git branch -vv

下图是在执行命令行后的结果,显示当前本地的master分支,与名为origin1的远程仓库中的master分支建立了关联。
在这里插入图片描述

⑤从远程仓库克隆

a. 命令行解释
除了将本地仓库的内容推送到远程仓库,也可以将远程仓库的内容克隆到本地。
命令形式:git clone <仓库路径> [本地目录]
注:本地目录可以省略,会自动生成一个目录。

b.演示从远程仓库克隆的过程

  • 在本地新建一个目录,新建一个本地仓库,并对其初始化。
    在这里插入图片描述
  • 在码云中复制要克隆的仓库地址

在这里插入图片描述

  • 回到本地仓库,执行下面命令
    以下命令行中,“git clone”是基本命令参数,后面的地址是上一步从码云上复制的地址。
git clone https://gitee.com/ma-haokainb/show_git_operation.git

执行命令后本地仓库显示克隆成功
在这里插入图片描述
查看本地目录文件,已经成功克隆到远程仓库的所有文件。
在这里插入图片描述

⑥从远程仓库中抓取和拉取

a.命令行解释
远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

  • 抓取 命令:git fetch [remote name] [branch name]

    注意:抓取指令是将仓库里的更新都抓取到本地,不会进行合并;
    如果不指定远端名称和分支名,则抓取所有分支。

  • 拉取 命令:git pull [remote name] [branch name]
    注意:拉取指令就是将远端仓库的修改拉到本地并自动进行合并等同于fetch+merge;
    如果不指定远端名称和分支名,则抓取所有并更新当前分支

b.演示抓取和拉取操作

  • 在gitWarehouse这个本地仓库进行一次提交并推送到远程仓库
    在这里插入图片描述
  • 在new_git本地仓库上拉取远程仓库的代码
    执行以下命令,加后面的参数是因为new_git仓库中的master分支还未与远程仓库git_warehouse中的master分支建立关联,直接拉取会报错。
git pull origin master --allow-unrelated-histories

仓库显示成功拉取
在这里插入图片描述
在这里插入图片描述
⑦合并冲突
在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。
A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交经过合并后才能推送到远端分支
在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突。
解决合并冲突与解决本地冲突类似,可以参照上面2.5.2解决分支冲突章节。

四、总结

本篇文章介绍了Git仓库的基本用法,属于Git使用的基础阶段,尽量详细介绍了每一个基础操作,方便以后使用时及时复习。至于进阶用法,今后在使用过程中会慢慢总结,以后会坚持写博客,记录自己的成长,目前还是小白水平,希望以后的文章会越来越好,也希望自己的文章能给陌生的你带来帮助,如有错误,请多多指教——2022年7月21日0点5分。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有点东西哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值