Git相关知识

1.Git常用的命令

一、前言

git 的操作可以通过命令的形式如执行,日常使用就如下图6个命令即可

实际上,如果想要熟练使用,超过60多个命令需要了解,下面则介绍下常见的的git 命令

二、有哪些

配置

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量,在我们安装完git之后,第一件事就是设置你的用户名和邮件地址

后续每一个提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改

设置提交代码时的用户信息命令如下:

  • git config [--global] user.name "[name]"
  • git config [--global] user.email "[email address]"

启动

一个git项目的初始有两个途径,分别是:

  • git init [project-name]:创建或在当前目录初始化一个git代码库
  • git clone url:下载一个项目和它的整个代码历史

日常基本操作

在日常工作中,代码常用的基本操作如下:

  • git init 初始化仓库,默认为 master 分支
  • git add . 提交全部文件修改到缓存区
  • git add <具体某个文件路径+全名> 提交某些文件到缓存区
  • git diff 查看当前代码 add后,会 add 哪些内容
  • git diff --staged查看现在 commit 提交后,会提交哪些内容
  • git status 查看当前分支状态
  • git pull <远程仓库名> <远程分支名> 拉取远程仓库的分支与本地当前分支合并
  • git pull <远程仓库名> <远程分支名>:<本地分支名> 拉取远程仓库的分支与本地某个分支合并
  • git commit -m "<注释>" 提交代码到本地仓库,并写提交注释
  • git commit -v 提交时显示所有diff信息
  • git commit --amend [file1] [file2] 重做上一次commit,并包括指定文件的新变化

关于提交信息的格式,可以遵循以下的规则:

  • feat: 新特性,添加功能
  • fix: 修改 bug
  • refactor: 代码重构
  • docs: 文档修改
  • style: 代码格式修改, 注意不是 css 修改
  • test: 测试用例修改
  • chore: 其他修改, 比如构建流程, 依赖管理

分支操作

  • git branch 查看本地所有分支
  • git branch -r 查看远程所有分支
  • git branch -a 查看本地和远程所有分支
  • git merge <分支名> 合并分支
  • git merge --abort 合并分支出现冲突时,取消合并,一切回到合并前的状态
  • git branch <新分支名> 基于当前分支,新建一个分支
  • git checkout --orphan <新分支名> 新建一个空分支(会保留之前分支的所有文件)
  • git branch -D <分支名> 删除本地某个分支
  • git push <远程库名> :<分支名> 删除远程某个分支
  • git branch <新分支名称> <提交ID> 从提交历史恢复某个删掉的某个分支
  • git branch -m <原分支名> <新分支名> 分支更名
  • git checkout <分支名> 切换到本地某个分支
  • git checkout <远程库名>/<分支名> 切换到线上某个分支
  • git checkout -b <新分支名> 把基于当前分支新建分支,并切换为这个分支

远程同步

远程操作常见的命令:

  • git fetch [remote] 下载远程仓库的所有变动
  • git remote -v 显示所有远程仓库
  • git pull [remote] [branch] 拉取远程仓库的分支与本地当前分支合并
  • git fetch 获取线上最新版信息记录,不合并
  • git push [remote] [branch] 上传本地指定分支到远程仓库
  • git push [remote] --force 强行推送当前分支到远程仓库,即使有冲突
  • git push [remote] --all 推送所有分支到远程仓库

撤销

  • git checkout [file] 恢复暂存区的指定文件到工作区

  • git checkout [commit] [file] 恢复某个commit的指定文件到暂存区和工作区

  • git checkout . 恢复暂存区的所有文件到工作区

  • git reset [commit] 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

  • git reset --hard 重置暂存区与工作区,与上一次commit保持一致

  • git reset [file] 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

  • git revert [commit] 后者的所有变化都将被前者抵消,并且应用到当前分支

reset:真实硬性回滚,目标版本后面的提交记录全部丢失了

revert:同样回滚,这个回滚操作相当于一个提价,目标版本后面的提交记录也全部都有

存储操作

你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作,但又不想提交这些杂乱的代码,这时候可以将代码进行存储

  • git stash 暂时将未提交的变化移除

  • git stash pop 取出储藏中最后存入的工作状态进行恢复,会删除储藏

  • git stash list 查看所有储藏中的工作

  • git stash apply <储藏的名称> 取出储藏中对应的工作状态进行恢复,不会删除储藏

  • git stash clear 清空所有储藏中的工作

  • git stash drop <储藏的名称> 删除对应的某个储藏

三、总结

git常用命令速查表如下所示:

 2.说说你对 git rebase 和 git merge 的理解?区别?

 一、是什么

在使用 git 进行版本管理的项目中,当完成一个特性的开发并将其合并到 master 分支时,会有两种方式:

  • git merge
  • git rebase

git rebase 与 git merge都有相同的作用,都是将一个分支的提交合并到另一分支上,但是在原理上却不相同

用法上两者也十分的简单:

git merge

将当前分支合并到指定分支,命令用法如下:

git merge xxx

git rebase

将当前分支移植到指定分支或指定commit之上,用法如下:

git rebase -i <commit>

常见的参数有--continue,用于解决冲突之后,继续执行rebase

git rebase --continue

二、分析

git merge

通过git merge将当前分支与xxx分支合并,产生的新的commit对象有两个父节点

如果“指定分支”本身是当前分支的一个直接子节点,则会产生快照合并

举个例子,bugfix分支是从master 分支分叉出来的,如下所示:

合并bugfix分支到master分支时,如果master分支的状态没有被更改过,即 bugfix分支的历史记录包含master分支所有的历史记录

所以通过把master分支的位置移动到bugfix的最新分支上,就完成合并

如果master分支的历史记录在创建bugfix分支后又有新的提交,如下情况:

这时候使用git merge的时候,会生成一个新的提交,并且master分支的HEAD会移动到新的分支上,如下:

从上面可以看到,会把两个分支的最新快照以及二者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照

git rebase

同样,master分支的历史记录在创建bugfix分支后又有新的提交,如下情况:

 

通过git rebase,会变成如下情况:

在移交过程中,如果发生冲突,需要修改各自的冲突,如下:

rebase之后,masterHEAD位置不变。因此,要合并master分支和bugfix分支

从上面可以看到,rebase会找到不同的分支的最近共同祖先,如上图的B

然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件(老的提交XY也没有被销毁,只是简单地不能再被访问或者使用)

然后将当前分支指向目标最新位置D, 然后将之前另存为临时文件的修改依序应用

三、区别

从上面可以看到,mergerebasea都是合并历史记录,但是各自特性不同:

merge

通过merge合并分支会新增一个merge commit,然后将两个分支的历史联系起来

其实是一种非破坏性的操作,对现有分支不会以任何方式被更改,但是会导致历史记录相对复杂rebase

rebase会将整个分支移动到另一个分支上,有效地整合了所有分支上的提交

主要的好处是历史记录更加清晰,是在原有提交的基础上将差异内容反映进去,消除了 git merge所需的不必要的合并提交

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蜡笔小开心

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

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

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

打赏作者

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

抵扣说明:

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

余额充值