Git 使用手册

Git

参考廖雪峰官方网站

定义

  • 分布式版本控制系统
  • Linus用C语言写的
  • 服务于Linux、GitHub等官网

集中式vs分布式

  • 集中式
    • CVS
    • SVN
      集中式架构
  • 分布式
    • Git
      分布式架构

安装Git

  • Linux
  • Mac OS
  • Window
    • Git 官网下载程序,默认选项安装
    • 鼠标右击---->Git Bash 出现黑色框命令行,表示Git安装成功
    • git config --global user.name "你的名字"
      git config --global user.email "你的邮箱"
      注意: git config命令的**–global参数**,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置

创建版本库

  • 什么是版本库(仓库)?
    可以理解为目录,所有文件被Git 管理
    创建版本库实际上就是单纯创建文件
    • Windows系统初始化仓库
          git init 
          Initialized empty Git repository in /Users/michael/learngit/.git/        
    
    是空的仓库,会多.git的文件
  • 文件添加到版本库
    跟踪文本文件的改动
    第一步,用命令**git add**告诉Git,把文件添加到仓库:
	   $ git add readme.txt

第二步,用命令**git commit**告诉Git,把文件提交到仓库:

	$ git commit -m "wrote a readme file"
	[master (root-commit) eaadf4e] wrote a readme file
	 1 file changed, 2 insertions(+)
	 create mode 100644 readme.txt

时光机穿梭

  • 要随时掌握工作区的状态,使用git status命令
  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容

版本回退

  • HEAD指向的版本就是当前版本,上一个版本就是HEAD^。因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上**–pretty=oneline参数**
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

工作区和暂存区

  • 工作区
    电脑里的目录
  • 版本库
    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
  • 暂存区
    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以 及指向master的一个指针叫HEAD
    图例描述
    例:git add ------> git commit
    在这里插入图片描述
    在这里插入图片描述

    管理修改

在这里插入图片描述
从上一节可以了解到git add 就把第一次修改的内容,放到暂存区,然后 git commit,就把第一次修改的内容整到master去了,第二次修改的内容并没有传到暂存区和master。

在这里插入图片描述
分别将第一次修改和第二次修改内容整到暂存区,然后一起git commit ,整到master
即:每次修改,如果不用git add到暂存区,那就不会加入到commit中

撤销修改

1、 工作区撤销修改

git checkout -- 文件名

2、 暂存区撤销修改

git reset HEAD <file>

回到了场景1,第二步按场景1操作
3、已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库

删除文件

将工作区文件删除,会出现工作区和版本库不一致,也就会出现两种情况:

  • 第一种情况: 版本库的文件需要删除,维持两者一致,代码为
git rm 文件
git commit -m  “提交描述”
  • 第二种情况: 恢复工作区的文件,维持两者一致,代码为
git checkout -- 文件

git checkout 用于版本库里的版本替换工作区的版本,无论是工作区的修改还是删除

分支管理

分支作用: 创建新分支,即使工作没完成,也可以提交,确保自己数据不丢失,且不影响其他人工作

创建与合并分支

  1. 主分支(master 分支),master指向最新提交,HEAD指向当前分支

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uGIMZMlm-1681020524445)(C:\Users\26541\AppData\Roaming\Typora\typora-user-images\image-20230408212403031.png)]

每次提交master就会往后移动,此分支也就越来越长。

  1. 创建新分支—dev

image-20230408212654323

dev 指向master相同的提交,HEAD指向dev,表示当前分支在dev

  1. 提交

image-20230408213040562

dev 就往后移动,HEAD还是指向dev,表示还是在dev分支

  1. 合并

image-20230408213235692

master指向dev的当前提交,并将HEAD指向master分支

  1. 合并。删除dev,就剩下master指针了

image-20230408213840665


  1. 创建 dev 分支,并将 HEAD指针指向 dev
git branch dev
git checkout dev

其中,git checkout 后面加上 -b 参数表示创建并切换

  1. 查看所有分支
git branch 
* dev
  master

其中,*表示当前的分支

image-20230408220123982

git checkout master     // 将HEAD 指向dev
git merge dev             // 合并

合并完成后就可以删除 dev

git branch -d dev

解决冲突

image-20230409131437204

有上图可知,两个分支分别修改同一文件中的内容,并都进行提交,这需要解决冲突 ,再合并。

如何解决冲突呢?

  1. git status 查看冲突文件
  2. cat 文件内容的冲突部分
  3. 手动更改冲突部分,并进行提交

image-20230409131940417

合并分支,删除 feature1,得到如图所示,并采用带参数的git log 来查看分支的合并情况

image-20230409132322040

分支管理策略

  1. 不使用Fast forward模式,合并后的历史有分支,能看出来曾经做过合并
git merge --no-ff -m "merge with no-ff" dev

image-20230409133238060

  • –no-ff 参数,表示禁用 Fast forward
  • -m 参数表示本次合并要创建一个新的commit,并把commit的描述加进去
  1. 使用 Fast forward模式,看不出来曾经做过合并

image-20230409133319970


实际开发中,团队合作的分支如下图所示。

image-20230409133659755

Bug分支

情景:

​ 当你接到修复一个bug的任务时,当前正在dev上进行的工作还没有提交,需要你先修bug,怎么办?

  1. dev 的工作进行隐藏

    git stash
    
  2. 建新分支,修复bug

  3. git stash list命令查看

  • git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
  • git stash pop,恢复的同时把stash内容删掉

Feature分支

  1. 开发一个新feature,最好新建一个分支;
  2. 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除

多人协作

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突

REBASE操作

  • rebase操作可以把本地未push的分叉提交历史整理成直线;
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

标签管理

创建标签

  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
  • 命令git tag可以查看所有标签。

操作标签

  • 命令git push origin <tagname>可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d <tagname>可以删除一个本地标签;
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签

将本地文件上传通过Git上传至Gitee

  1. 生成密钥
ssh-keygen -t rsa -C “邮箱” 

输入上面的命令后一直按3次回车直到出现图形界面即可

查看生成的密钥

cat ~/.ssh/id_rsa.pub

将密钥复制到Gitee的SSH公钥中。

  1. 从Gitee新建仓库,克隆到本地/或者新建文件,然后把需要上传的文件复制到克隆/新建的文件中

  • git int 生成版本库,即文件里出现 .git文件
  • git add . 将所有文件放入暂存区
  • git commit -m “描述” 将内容提交
  • git remote add origin xxxxxxxx.git xxxxxxxx就是https地址
  • git push -u origin main 输入Gitee 用户名和密码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值