git版本控制

一、版本控制工具

1.什么是版本控制工具

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

2.集中式版本控制工具

例如svn,cvs,它们都有一个集中统一管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

3.分布式版本控制工具

例如git,每个客户端都有整个完整的项目,服务器断网的情况下也可以进行开发,因为版本控制是在本地进行的,断网后只是不能将本地代码推送到远程服务器上。客户端每一次文件提取工作都是对整个文件仓库的完整备份。

4.git工作机制

在这里插入图片描述

4.1 关于git为什么要设立暂存区的一些理解

参考
可以将暂存区看作购物车,commit看作提交订单,这样更有助于理解暂存区的作用。

5.代码托管中心–远程仓库

gitlab 局域网
github,gitee 互联网

二、git常用命令

命令名称功能
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m “日志信息”提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

1. 用户签名

1.1 基本语法

1.1.1 查看用户签名

//查看用户名
git config user.name
//查看邮箱地址
git config user.email

1.1.2 设置/修改全局用户签名

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

1.1.3 修改指定项目的用户签名

在一个特定的项目中使用不同的 用户名 和 邮箱地址 来提交,可以使用下面的方法单独设置 用户名 和 邮箱地址 ,如果不设置就会默认使用上面全局设置的 用户名 和 邮箱地址 。打开终端 cd 到指定项目的仓库下,分别输入以下命令即可单独修改 用户名 和 邮箱地址 。

//修改用户名,xxx 处填写你的用户名
git config user.name "xxx"
//修改邮箱地址,xxx 处填写你的邮箱地址
git config user.email "xxx"

1.2 注意事项

  1. 这里的邮箱可以设置为不存在的邮箱,git并不会进行验证。
  2. 签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。
  3. 这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系
  4. 可以在c盘用户admin中的.gitconfig查看用户名和邮箱。

1.3 实操

在这里插入图片描述

2.初始化本地库

2.1 语法

git init

2.2 作用

把本地文件夹作为git的本地库

3.查看本地库状态

3.1 语法

git status

3.2 实操

untracked files 未追踪的文件,就是未添加到暂存区也未提交过的文件;
在这里插入图片描述
Changes not staged for commit 修改但未添加到暂存区的文件

在这里插入图片描述

4.添加暂存区

4.1 语法 参考

  1. 添加单个文件git add 文件名;
  2. 提交所有变化git add -A;(git add --all的缩写)
  3. 提交被修改(modified)和被删除(deleted)文件,不包括新文件(untracked file) git add -u;(git add --update的缩写)
  4. 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件 git add .
    在这里插入图片描述

4.2 查看状态(检测到暂存区有新文件)

new file: hello.txt  即为刚刚添加到暂存区的文件

在这里插入图片描述

4.3 删除暂存区中的文件

git rm --cached 文件名

仅删除暂存区中的文件,而工作区的文件不会受到影响。
删除之后查看状态又会变成Untracked files。

admin@LAPTOP-CNA7GUCV MINGW64 /d/研究生材料/git练习 (master)
$ git add test.txt

admin@LAPTOP-CNA7GUCV MINGW64 /d/研究生材料/git练习 (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test.txt


admin@LAPTOP-CNA7GUCV MINGW64 /d/研究生材料/git练习 (master)
$ ll
total 1
-rw-r--r-- 1 admin 197121 20 Nov 30 21:16 test.txt

admin@LAPTOP-CNA7GUCV MINGW64 /d/研究生材料/git练习 (master)
$ git rm --cached test.txt
rm 'test.txt'

admin@LAPTOP-CNA7GUCV MINGW64 /d/研究生材料/git练习 (master)
$ ll
total 1
-rw-r--r-- 1 admin 197121 20 Nov 30 21:16 test.txt

admin@LAPTOP-CNA7GUCV MINGW64 /d/研究生材料/git练习 (master)
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test.txt

nothing added to commit but untracked files present (use "git add" to track)

5.提交本地库

5.1 语法

git commit -m "日志信息" [文件名]

如果不写文件名,则将暂存区中的所有文件全部提交。
注意:git push 推送的时候不用写日志信息,而在gitee中显示的日志信息和提交时间是commit时产生的;push只是将本地库的内容推送到远程库中。

6.文件修改

6.1 实操

修改后的状态
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   test.txt

  1. 添加到暂存区;
  2. 提交到本地库。

7.查看历史版本

7.1 语法

git log (详细版)
git reflog  (简略版)

7.2 实操

087a1a7 版本号
my third commit 版本日志

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit

7.3 版本穿梭

版本号是通过git reflog得到的7位字符;

git reset --hard 版本号

Git 切换版本,底层其实是移动的 HEAD 指针。
在这里插入图片描述

7.4 把修改推到远程服务器

强制推送到远程分支, 会抹去当前版本之后远程库的提交信息, 一般不提倡这么做;

git push -f origin master // f表示强制推送  

三、分支

1.什么是分支

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

在这里插入图片描述

2.分支的好处

可以同时进行多个任务的开发,提升开发效率;
如果某个分支出现问题,不会影响其它分支。

3.分支的操作

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

3.1查看分支

  1. 查看本地分支git branchgit branch -v(查看详细信息);
    查看本地分支时,绿色的是当前分支
    在这里插入图片描述

  2. 查看远程库分支git branch -r (r代表remote)

  3. 查看所有分支git branch -a(a代表all)

3.2创建分支

3.3切换分支

3.4冲突情况下合并分支

  1. 手动修改存在冲突的文件,并将无关信息删除;(<<<<head,=,>>>> hot-fix)
    在这里插入图片描述
  2. 将修改后的文件加入暂存区(在master分支中);
  3. 执行提交,此时使用git commit命令时不能带有文件名;

4 分支的应用场景

  • 默认新建仓库有个master主干
  • 比如现在要开发了,需要新建一个dev分支
  • 如果dev分支的代码开发完了,需要合并dev分支的代码到test分支
  • 测试人员测试test分支的代码,如果测试没问题,则合并test分支的代码到master
  • 线上运行时,发现了问题,需要从master主干再多一个分支fixbugs分支,去修改bug
  • 修复完线上的bug后,需要把修复的分支合并到各个分支

四、团队协作

在这里插入图片描述

1.推送本地库到远程库

1.1创建远程库

在这里插入图片描述

1.2 给远程库起别名

  1. 在git的本地库文件夹下打开bash窗口,然后使用git remote add 别名 远程仓库地址指令给远程库设置别名;
  2. 设置别名后,使用git remote -v查看远程仓库时会发现存在两个,一个是推送,一个是拉取;(下面图片中git-test是别名,后边是远程库地址)
  3. 为了方便后续的推送、拉取操作,一般都会给远程库设置别名,而且可以给一个远程库设置多个别名;
    在这里插入图片描述
    下图是远程仓库地址/远程主机名https://xxxxxxxxxxxx.git
    在这里插入图片描述

1.3 推送本地分支到远程仓库(此处的远程仓库一般使用别名)

  1. 如果本地分支名与远程分支名相同,可以使用git push 远程库别名 本地库分支指令,推送的最小单位是分支。
    注意:git push是将commit到本地库中的文件推送到远程服务器上;
    在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了
  2. git push的一般形式为 git push <远程主机名> <本地分支名> :<远程分支名>例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名。第一个master是本地分支名,第二个refs/for/master是远程分支名。
  3. 要先拉取,然后再推送
    在这里插入图片描述
    在这里插入图片描述

2.拉取远程库到本地库(此处的远程仓库一般使用别名)

  1. 一般形式:git pull <远程主机名> <远程分支名>:<本地分支名>
  2. 如果远程分支和当前分支(可以通过git branch查看)合并,则可以省略本地分支名: git pull 远程库名称 远程库分支

3.克隆远程库到本地

直接在vs或者idea克隆远程库

git clone 远程库地址

小结:clone 会做如下操作。1、拉取代码。2、初始化本地仓库。3、创建别名
对于公开的远程库,克隆不需要账号

4.ssh免密登录

如果使用https地址来访问github,每次操作都需要填写账号密码,只是在windows10中Windows凭据替我们保存了账号密码,所以我们不需要每次都输入账号密码。
参考文章首先要在用户根目录下生成.ssh文件夹,里面存放着公钥(pub)和私钥,将公钥的内容复制到github中,然后就可以使用ssh地址进行代码的拉取、推送和克隆。如果感觉地址不方便,也可以给ssh地址设置别名,命令跟https地址相同。

五、vs中git的使用

1.储藏

  1. 作用相当于git指令git stash参考文章
  2. 官方文档:有时,当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态, 而这时你想要切换到另一个分支做一点别的事情。 问题是,你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交。 针对这个问题的答案是 git stash 命令。

2. 修改

作用相当于git指令git commit --amend(参考文章)
将更改内容追加到最新提交版本中
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值