1、查看不同版本之间的代码差异

短SHA-1值

使用git命令来代表某个commit时,我们不一定就是要用40位完整的SHA-1 hash值,也可以只是提供hash值的前几位就可以了,至少要4位以上,同时在git仓库中就这前几位可以唯一定位一个commit就ok。一般会选择前7位。

版本回退:

git  reset  hash值

git  reset  --hard  hash值参数--hard,直接把工作区的内容也修改了,不加--hard的时候只是操作了暂存区,不影响工作区。

看一下某个commit的具体信息:

git  show  hash值

查看某个分支指向哪个master

分支实际上就是一些指针,所以分支是指向commit的,也可以直接用分支名称来指代它目前指向的那个commit

git  show  master,就可以查看master分支指向的那个commit

选择历史版本的特殊语法

git show HEAD^

git show HEAD~2

HEAD,指针,指向的是当前的那个分支,当前的那个分支又是指向某个commit

HEAD,就可以指代当前你所处的那个commit对应的版本

HEAD,就是说,HEAD对应的commit的上一个commit,HEAD^,上两个commit,HEAD^,上三个commit

HEAD~5,就是说HEAD之前的第5个commit

比较两个分支之间差了哪些commit还没有合并

git  diff:工作区和暂存区

git  diff  --cached:暂存区和仓库

git  diff  HEAD:工作区和仓库

git  diff   分支1  分支2:两个分支之间的差异

git  diff  HEAD  HEAD^:最近两次提交之间的差异

gitlab进行分支代码对比:

2、将暂存区里边的功能代码分为多次提交

我们把很多天的代码都提交到了暂存区了,如何将暂存区的内容分为多个commit来提交?

1. git add -i 进入交互模式

2. 输入 3  使用revert 从暂存区挪出来    update 是放入暂存区

3. 选择你想要挪出来的文件  选中之后前面就会被标上 *

还可以继续标。

4. 回车输入7退出  再查看状态test.txt变成没有了被追踪的文件

3、开发中途要切换分支又不能commit

强行切换git是不允许切换的。

执行 git  stash

这个命令执行完后,发现工作区的代码恢复到干净的状态,好像什么都没改过。然后等到其他的分支任务干完之后,再切换回来。

执行 git stash list

查看有哪些stash

恢复git stash apply  或者是 git  stash apply  stash@{0}

注意:git stash apply 默认恢复最新版本即:stash@{1}

删除stash

git  stash  drop  stash名称  

git  stash  -u  --include-untracked

git  stash 默认是将工作区modifyed 状态的文件暂存起来,对于untracked file文件,git stash 这个命令是不能进行暂存的!不过对于只有新增文件,是可以进行切换分支的。

如果你想将 untracked 文件也进行暂存起来,需要执行 git  stash  -u  --include-untracked

4、针对本地不规范的commit进行修改

当我们已经本地执行了commit,但是还没有push到远程仓库,这个时候发现我写的备注不符合规范,那么此时可以进行如下操作:

1、修改最新一次commit,执行git commit --amend

这里进行修改你的最新一次提交的备注,然后保存退出。

注意对比修改前后commit的hash值变了。说明git给重新生成了一个commit。

2、对历史上的多个commit进行修改,dd执行 git  rebase  -i   HEAD~2

将要修改的 commit 前边的 改成 edit

保存退出:

执行 git  commit  --amend 可以修改注释

再继续修改下一个commit要执行  git rebase --continue

3、删除某个commit

执行:git rebase -i HEAD~2

直接删除掉不想要的commit那一行再保存即可。

注意:要至少保留一行哦!否则都生效。

4、多个commit合并为一个commit

假如你最近的这两个commit 要合并成为一个commit,执行:

git  rebase -i HEAD~3    记住往前要多增加一个commit

然后将你想合并的commit 前边变成  squash,保存后添加合并后的注释,就会自动将其保存为一个commit。

5、好几天的代码一次性commit了,如何进行拆分?

git  rebase  -i  HEAD~3    将你想改的那个commit 前边变成 edit

再执行 git reset  HEAD^   就会回退回去了

也可以直接使用

git   reset  --hard  HEAD^

然后再一点一点的提交,使用命令:

git  add  文件名

5、对本地做出的修改、暂存和提交进行撤回

对于比较少的文件修改执行  git  checkout  文件名

对于修改了很多的文件,直接执行 git  reset  --hard  HEAD

参数--hard,直接把工作区的内容也修改了,不加 --hard 的时候只是清除了暂存区,不影响工作区。

6、远程和本地同时撤回本地远程分支合并操作

1、当执行merge操作时候,发生了冲突,不想merge了,该怎么办?

执行命令:git  merge --abort

注意:合并开始时如果存在未commit的文件,git merge --abort在某些情况下将无法重现合并前的状态。

2、当merge已经执行成功了,但是想回退,怎么办?

git   reset  --hard HEAD^

3、如果merge 成功并且推送到远程仓库,那么想回退怎么办?

首先在你想回退的分支本地执行 git revert -m 1 HEAD

这个不是说指针回退而是重新创建了一个新的commit,这个新的commit对应的版本跟之前合并之前的commit是一样的。

然后执行  git push origin master    这就可以将远程的分支进行回退版本了。

4、当过一段时间,你还想把之前的版本重新merge到master,这个时候你会发现master执行merge已经没用了,此时该怎么办呢?

1、git rever HEAD  回退到merge之后的状态。

2、再次执行merge合并feature/001的代码到master

3、然后执行push

git push origin master

7、二分查找定位commit的线上bug

1、首先开启二分查找

git  bisect start 或者 git  bisect  start  [终点提交hash值] [起点提交hash值]

2、标注当前的commit 是有bug的

git  bisect  bad  hash值

3、可以用tag来标注某个tag或者commit hash值之前是好的

git bisect  good [tag值]/[hash值]

表示说1.0 tag版本之前是好的。

4、查看当前的版本是否有bug,如果没有bug,执行 git bisect  good,会继续进行二分查找。

5:测试到此时,执行测试代码进行bug复现,发现bug找到了,执行git  bisect bad.

6:   以此类推,直到找到最后一个commit,认为就是这个commit开始引入的bug。

7:执行 git  bisect reset 恢复之前的状态

8、团队拆分迁移项目时简化提交历史

场景:

之前的项目现在要拆成两个项目,供给两个团队使用。有个注意事项就是把之前的提交历史给抹掉,让新团队接受的代码只有初始化的提交历史。

步骤:

1、创建一个项目wileeProject2

2、清空提交历史 git rebase --onto A B C。

echo '基于当前commit hash创建一个不在当前分支上的一个新的commit' | git commit-tree 基准commit的hash^{tree}

git rebase --onto A B C

低阶命令:echo '合并历史数据通过之前的项目' | git commit-tree 基准commit的hash^{tree}

(下面涉及的命令详解在Git内幕原理中)

命令作用:

基于当前hash的commit提供的树对象创建一个新的commit,此commit不属于任何分支,然后返回新的提交对象id到控制台。

命令:git branch -r --contains COMMIT_ID

命令作用:

此命令用于查看commit_id属于哪一个分支。

命令:git rebase --onto A B C  中ABC三者代表的含义:

A : 是一个分支名称(代表此分支的 HEAD)或者是一个 commit_id (此 id 不在 C 上)

B : 一个分支名称(此分支与 C 有共同的祖先 commit)或者是一个 commit_id (此 id 在 C 上)

C : 一个分支名称

命令的作用:

1、首先会执行 git checkout 切换到 C分支上面

2、将 B 到 C(HEAD) 之间所标识范围内的提交写到一个临时文件中 ,若B 为分支名称,则找 B 与 C 共同的祖先 commit,为此次 commit 到 C(HEAD) 之间所标识范围内的提交。

3、将当前分支强制重置(git reset --hard)到 A

4、从2中临时文件的提交列表中,一个一个将提交按照顺序重新提交到重置之后的分支上

3、推送到远程项目wileeProject2

git remote remove origin

git remote add origin git@192.168.31.38:root/wileeproject2.git

9、如何将新版本的功能放到上一个版本提前上线

git  cherry-pick  feature/002  29a3c4c

其中29a3c4c这个commit hash值就是 feature/002分支中的一个commit hash值。

该命令意思:

将代码某个commit转移到另一个分支

git 修改tag 备注_【Git】第十二章:Git高级实战技巧相关推荐

  1. 唐 库利超级计算机,第七卷 乖离性 百万亚瑟王_第二百五十二章 绝望中的希望...

    第七卷 乖离性 百万亚瑟王_第二百五十二章 绝望中的希望 赫布里底训练大厅. "诸位,结果已经分析出来了,丘库林,也就是被你们捉到的闯入者,他身上的神装的确是断绝时代的遗物不错,而且,这件神 ...

  2. 第十二章 卷积神经网络实战--猫狗识别

    1.介绍 我们已经学习了如何用传统的神经网络进行机器学习,在本章我们学习一下如何使用简单的神经网络进行图像分类.数据集用的是Kaggle的猫狗数据集.这里只有前100张,如果需要更多的可以去Kaggl ...

  3. recv函数_第五十二章、send和recv函数

    套接字之间一旦建立了连接,那么就可以传送数据了,上一章我们使用的是标准读写函数read和write,这一章我们再来学习另外两个函数recv和send函数. recv和send函数只能用于套接字,还需要 ...

  4. 怎么用stata打开dta文件_第三十二章、用c语言打开文件

    这一章我们先来了解一下文件是什么? 一个文件通常就是磁盘上的一段命名的存储区.如我们在C语言编程中经常引入的stdio.h就是一个包含一些有用信息的文件的名称.当然对于操作系统来说,文件就会更复杂一些 ...

  5. DevOps进阶(十二)GIT、GITLAB、GITHUB、GITLIB

    DevOps进阶(十二)GIT.GITLAB.GITHUB.GITLIB Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,可以 ...

  6. stm32 文件系统dma大小_「正点原子NANO STM32F103开发板资料连载」第二十二章 DMA 实验...

    1)实验平台:[正点原子] NANO STM32F103 开发板 2)摘自<正点原子STM32 F1 开发指南(NANO 板-HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 ...

  7. 系统架构师学习笔记_第十二章_连载

    第十二章  系统安全架构设计 12.1  信息系统安全架构的简单描述 信息安全的特征 是为了保证信息的 机密性.完整性.可用性.可控性.不可抵赖性. 以风险策略为基础. 12.1.1  信息安全的现状 ...

  8. 简述sd卡2.0协议_【正点原子FPGA连载】第十二章SD卡读写TXT文本实验-领航者 ZYNQ 之嵌入式开发指南...

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  9. linux i2c adapter 增加设备_「正点原子Linux连载」第六十二章Linux SPI驱动实验(一)...

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南>关注官方微信号公众号,获取更多资料:正点原子 第六十二章Linux SPI驱动实验 上一 ...

最新文章

  1. 2021,软科中国大学排名新鲜出炉!清华、北大、浙大位居前三!
  2. python操作RabbitMQ
  3. 深度学习模型大合集:GitHub趋势榜第一,两天斩获2000星
  4. 笨办法学 Python · 续 练习 1:流程
  5. Kindle多看系统中字典
  6. 线性回归、bagging回归、随机森林回归
  7. Apache网页优化(网页压缩、网页缓存、隐藏版本、配置防盗链)
  8. 国内十家微交易平台,正规微交易平台排行榜
  9. Laravel Eloquent ORM字段处理
  10. 微信小程序java装修家装系统
  11. 扇贝python骗局_北斗揭獐子岛扇贝骗局:27条采捕船数万航行数据还原轨迹
  12. python 中dtype 为object_DataFrame中的字符串,但dtype是对象
  13. duobango-tinySDP,rfc 2327
  14. 01 words sentences BYOD
  15. MySQL 基础学习笔记(1)
  16. java8 数值流 装箱和拆箱讲解
  17. 究竟是什么样的奇葩需求?威胁到程序员的头发...
  18. JAVA 开发人工智能
  19. 三坐标检测基础知识之测头传感器及测针的选择
  20. 半波整流图 matlab仿真,单相半波整流电路matlab仿真.ppt

热门文章

  1. python第六篇:Python复制超大文件、复制二进制文件
  2. java编程思想读书笔记二(对象的创建)
  3. iOS从生成证书到打包上架-02(详细2016-10最新)
  4. Java Timer、TimerTask
  5. 用谷歌浏览器来模拟手机浏览器
  6. 15-07-06 定闹钟
  7. ASP进阶教程Ⅷ:数据库版本的留言簿
  8. 网站搜索引擎优化SEO策略及相关工具资源
  9. 【LeetCode】15.Longest Common Prefix
  10. AndroidStudio_安卓原生开发_拍照存储在Uri中_利用图片后通过Uri获取文件真实路径_然后删除---Android原生开发工作笔记161