bisect git 使用_Git使用过程中的一些常见场景问题总结

之前在公司内部推Git,写了一份git使用教程,后来又在团队内部做了一次分享,内容是关于Git使用过程中经常会遇到的一些场景,并有了这份总结。

git基础

基于feature的工作流

添加忽略文件 .gitignore (http://gitignore.io/)

基于develop分支开发:feature分支 bugfix分支 版本节点tag

问题排查: diff 、log 、reflog、blame

撤销操作: checkout 、reset、revert、commit --amend

删除操作: rm clean

储藏操作: stash

分支操作:创建、删除(注意远程分支的删除)、切换、合并(--no-ff 、rebase)

标签操作

更多详细查看上面教程链接

场景

1. 本地已经存在的项目/分支与如何远程仓库关联

git remote add origin

2. 刚刚提交了的commit log发现错了,想修改

git commit --amend -m "your new log"

3. 查看某次提交的日志和ID

git reflog

4. 查看某次提交的内容

git show

5. 只是修改了工作区的文件,想恢复到原来修改前的样子

git reset --hard HEAD

git checkout --

6. 被修改的文件已经添加到了暂存区,想撤销添加

git reset --mixed HEAD

7. 被修改的文件已经commit提交,想撤销提交

git reset --soft HEAD^

8. 已经提交到远程主机的文件,想撤销

git revert

git revert HEAD

9. 已经开发一半的功能,但是没有开发完,这时候有个bug要紧急处理,需要放下手头的功能,赶去修改BUG

// 保存现场

git stash

// 恢复现场

git stash pop

10. 加入过历史版本的文件,因某些原因被删除了想恢复

git checkout --

另外你也可以用reset命令来完成

11. 需要单独把多次提交中的某一次提交从你的分支迁移到另外一个分支上,即跨分支应用commit

git cherry-pick

比如:我想把以下分支

A-B master

\

C-D-E-F-G develop

中的D,F 两次提交移动到master分支,而保持其他commit不变,结果就像这样

A-B-D-F master

\

C-E-G develop

那么,思路是将D,F 用cherry-pick应用到master分支上,然后将develop分支对master分支变基。

$ git checkout master

$ git cherry-pick D

$ git cherry-pick F

$ git checkout develop

$ git rebase master

注意有些情况下使用cherry-pick会存在冲突,解决方法和我们平时合并分支遇到冲突一样。

12. 遇到文件冲突,可以手动解决,或者用你配置的工具解决,记得把文件标位resolved:add/rm

如:常见的拉取同事的代码合并引起冲突

1. 手动处理冲突

2. 文件标志位置为resolved:git add

3. 继续合并 git merge --continue

当然也可以选择放弃合并:git merge --abort

13. 让自己本地分支上面的每一次提交日志变得更有意义,有时候需要我们选择有意义的提交日志信息合并上去

比如我们在bugfix分支上面由于修改bug提交了很多次,修复好了之后,我们想把这些提交合并入我们的master分支

git checkout master

git merge --squash bugfix

git commit -m "bug fixed"

上面操作会将bugfix分支上的所有commit都合并为一个commit,并把它并入我们的master分支上去。这里还有一点需要注意的是:--squash含义代表的是本地内容与不使用该选项的合并结果相同,但是不提交,不移动HEAD指针,所以我们要另外多一条语句来移动我们的HEAD指针,即最后的commit。

14. 有时候需要整理我们本地的commits,可以使用Squash

git rebase -i

举例:

git rebase -i HEAD~5

执行完后,Git会把所有commit列出来,让你进行一些修改,修改完成之后会根据你的修改来rebase。HEAD-5的意思是只修改最近的5个commit。

pick 033beb4 b1

pick b426a8a b2

pick c216era b3

pick d627c9a b4

pick e416c8b b5

# Rebase 033beb4..e416c8b onto 033beb4

#

# Commands:

# p, pick = use commit

# r, reword = use commit, but edit the commit message

# e, edit = use commit, but stop for amending

# s, squash = use commit, but meld into previous commit

# f, fixup = like "squash", but discard this commit's log message

# x, exec = run command (the rest of the line) using shell

#

# If you remove a line here THAT COMMIT WILL BE LOST.

# However, if you remove everything, the rebase will be aborted.

#

上面pick是要执行的commit指令,另外还有reword、edit、squash、fixup、exec这5个,具体的含义可以看上面的注释解释,比较简单,这里就不说了。

我们要合并就需要修改前面的pick指令:

pick 033beb4 b1

squash b426a8a b2

squash c216era b3

squash d627c9a b4

squash e416c8b b5

也就是下面这4个提交合并到最前面的那个提交里面,按esc,打上:wq提交保存离开。

接着是输入新的commit message

b

# This is a combination of 2 commits.

# The first commit's message is:

# b1

#

# This is the 2nd commit message:

#

# b2

#

# This is the 3rd commit message:

#

# b3

#

# This is the 4th commit message:

#

# b4

#

# This is the 5th commit message:

#

# b5

#

# Please enter the commit message for your changes. Lines starting

# with '#' will be ignored, and an empty message aborts the commit.

# Not currently on any branch.

# Changes to be committed:

# (use "git reset HEAD ..." to unstage)

#

# modified: a.txt

#

其中第一行的b就是需要我们输入的新信息,同样编辑完保存,出现类似下面的信息:

Successfully rebased and updated refs/heads/develop.

最后可以用git log指令来验证commits是不是我们要变成的样子。

15. 多人协作开发项目,想知道某个文件的当前改动情况

通常查问题时想知道某个文件的某部分代码是谁改动的,那么git blame 就派上用场了。

git blame

你也可以具体指定到某一行或者某几行代码

git blame -L ,

16. 执行push命令向多个仓库同时提交代码

有时候会做代码备份,将代码保存在几个不同的Git代码管理平台,这时候就需要用到了

修改本地仓库目录下.git/config文件

[core]

repositoryformatversion = 0

filemode = true

bare = false

logallrefupdates = true

ignorecase = true

precomposeunicode = true

[remote "origin"]

url = git@github.com:yuxingxin/blog.git

url = ……

url = ……

fetch = +refs/heads/*:refs/remotes/origin/*

如上 在remote处可以添加多个远程地址。

17. 从多次提交中快速定位某一次提交的bug

# 开始 bisect

$ git bisect start

# 录入正确的 commit

$ git bisect good xxxxxx

# 录入出错的 commit

$ git bisect bad xxxxxx

# 然后 git 开始在出错的 commit 与正确的 commit 之间开始二分查找,这个过程中你需要不断的验证你的应用是否正常

$ git bisect bad

$ git bisect good

$ git bisect good

...

# 直到定位到出错的 commit,退出 bisect

$ git bisect reset

总结

当然了,git的一些常见场景,还远不止这些,限于本人能力有限,如果你在平时的工作中遇到一些很实用的命令,也欢迎反馈给我,我好一并学习。更多的详细可以参考之前总结的一系列文档: https://devops.yuxingxin.com。 学习git命令是一件很有意思的事情,我想它能帮助使用git命令的人更好的理解这一代码管理工具,从而不至于犯一些低级错误,MobDevGroup网站上面也分享过几个学习命令的网站,可以供参考:https://mobdevgroup.com/tools/assistant

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c 多文件全局变量_C语言开发单片机为什么大多数都采用全局变量的形式?

点击上方蓝字关注我哦~01前言全局变量简直就是嵌入式系统的戈兰高地。冲突最激烈的双方是1. 做控制的工程师 2. 做非嵌入式的软件工程师。02做控制的工程师特点他们普遍的理解就是“变量都写成全局该有多方便”。我之前面试过一个非常有名的做控制实验室里出来的PhD…

linux耳机插拔检测,Android应用开发之耳机插拔处理两种方式

本文将带你了解Android应用开发[RK3288][Android6.0] 耳机插拔处理两种方式,希望本文对大家学Android有所帮助。[RK3288][Android6.0] 耳机插拔处理两种方式。Platform: RockchipOS: Android 6.0Kernel: 3.10.92系统对耳机插拔处理的方式有两种,一种…

医学图像处理_专刊征稿|医学图像处理中的认知计算

认知科学是20世纪世界科学标志性的新兴研究门类,它作为探究人脑或心智工作机制的前沿性尖端学科,已经引起了全世界科学家们的广泛关注。认知计算代表一种全新的计算模式,它包含信息分析,自然语言处理和机器学习领域的大量技术创新…

python 如何判断一个函数执行完成_Python 函数为什么会默认返回 None?

👆 “Python猫” ,一个值得加星标的公众号Python 有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值,不管你有没有写 return 语句。 本文出自“Python为什么”系列,在正式开始之前,我们…

中美线径对照表_中国线径与英美德线规对照表

德DIN*线径(mm)实际截面(mm2)标准截面(mm2)线号线径(mm)线号线径(mm)线径(mm)7/012.712.56/011.7854/011.68411.298.52001005/010.9733/010.40411.21078.5400804/010.1610963.6200633/09.4492/09.26692/08.839850.27005008.2308.253817.627.139.59004027.0117.3487.16.331.1700…

不在 sudoers 文件中。此事将被报告_快餐包装中检出致癌物质?麦当劳、汉堡王回应!...

薯条汉堡、雪碧可乐已然成为大家的用餐首选之一一周吃了两次以上的人相信也不在少数可最近一则“麦当劳、汉堡王等快餐包装中检出致癌物质”的消息却让许多人吓出了一身冷汗而且迅速登上热搜榜…近日,环保组织的一份报告称,美国当地麦当劳McDonald’s、汉…

lichee linux nfs,SPI Flash 系统编译

在一些低成本应用场景,需要在SPI flash上启动系统,这需要对Uboot和系统镜像做些适配。本文介绍SPI Flash镜像的制作过程。这里 使用 MX25L25645G, 32M SPI flash 作为启动介质,规划分区如下:分区序号分区大小分区作用地址空间及分…

tensorflow越跑越慢_tensorflow如何解决越运行越慢的问题

这几天写tensorflow的时候发现随着迭代的次数越来越多,tensorflow跑的速度越来越慢。查找才发现是tensorflow不断的给之前的图里加节点,导致占用的内存越来越大,然后我尝试了网上的各种方法,终于发现了一个靠谱的方法,…

propertysource注解_Java开发必须掌握的 20+ 种 Spring 常用注解

作者:IT_faquir链接:https://blog.csdn.net/IT_faquir注解本身没有功能的,就和xml一样。注解和xml都是一种元数据,元数据即解释数据的数据,这就是所谓配置。本文主要罗列Spring|SpringMVC相关注解的简介。Spring部分1.…

linux协议栈劫持,Linux系统优化之TCP协议栈优化-基本篇1

因为在做爬虫分布式系统的过程中,涉及到了一些linux系统优化方面的知识,所以来总结一下,我们会对linux的不同模块做相关的基本优化,这篇文章主要讲述的是关于tcp协议栈的参数优化。1.机器环境Linux EOS01 2.6.32-358.el6.x86_64 #…

datapumpdir oracle_oracle_datapump创建外部表案例

一、datapump创建外部表,数据来源于内部实体表 --首先创建 scott.countries实体表,用于做实验 SQLgt; create table scott.cou一、datapump创建外部表,数据来源于内部实体表--首先创建 scott.countries实体表,用于做实验SQL> c…

linux 百度地图离线sdk,Android开放百度地图集成

1、创建应用 获取AK (我理解为Application key)通过百度账号登录百度地图开放平台,进入API控制台 http://lbsyun.baidu.com/apiconsole/key 创建自己的应用,输入应用名称 ,选择Android SDK 应用类型,选择需要的服务(默认全选) 输入…

activiti7流程设计器_基于容器和微服务应用的架构:容器设计原则

微服务提供了巨大的好处,但也带来了巨大的新挑战。在创建基于微服务的应用程序时,微服务体系结构模式是最基本的支柱。在本指南的前面,您学习了关于容器和Docker的基本概念。这是开始使用容器所需的最低信息。尽管,即使容器是微服…

opencv 图像 抠图 算法_图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting

一、序言陆陆续续的如果累计起来,我估计至少有二十来位左右的朋友加我QQ,向我咨询有关抠图方面的算法,可惜的是,我对这方面之前一直是没有研究过的。除了利用和Photoshop中的魔棒一样的技术或者Photoshop中的选区菜单中的色彩范围…

女生做产品经理好吗_女生天生就是产品经理,不服来战!

关注🔝蓝字,获取求职干货信息大家好,姗姗来迟~这个梗会不会被扣工资前两天,小米的资深产品经理Alina老师征集用户需求:关于产品经理的直播课,大家想听什么呀?姗姗一直很好奇:一个对逻…

c语言文件读写r 的作用,C语言 读写二进制文件

查找了比较多的资源, 发现没有办法把text 文件转成binary文件仅作为记录,不过这个例子可以去除换行符。#include #include #define N 255int main(){char a[N];FILE *fp1,*fp2;fp1fopen("test_seq.fa","r");fp2fopen("testSeq.…

verlay虚拟化技术_FPGA虚拟化:突破次元壁的技术

原标题:FPGA虚拟化:突破次元壁的技术来源:内容来自「老石谈芯」,作者 老石,谢谢。1利用FPGA虚拟化突破时空限制在传统的FPGA开发模型中,使用者通常使用硬件描述语言(HDL)对应用场景进行建模,然后…

tcp报文格式_34.TCP取样器

阅读文本大概需要3分钟。1、TCP取样器的作用TCP取样器作用就是通过TCP/IP协议来连接服务器,然后发送数据和接收数据。2、TCP取样器详解TCPClient classname:TCP报文格式类名,默认前缀org.apache.jmeter.protocol.tcp.sampler.① TCPClientImp…

c语言程序设计字符处理周信东,“电子科技大学出版社(周信东主编)”的C语言程序设计实验-整理代码-.doc...

“电子科技大学出版社(周信东主编)”的C语言程序设计实验-整理代码-.doc-前言-/*非常感谢度?娘以及各位?网上C语言?高手的支持?,才能让敝人?完成此文档?的整理。本文档集合?了本人、度娘、众网友的力?量,其中代码的?正确率约为?90%(不正确的有…

pythonwx功能_python中wx模块的具体使用方法

wx包中的方法都是以大写字母开头的,而这和Python的习惯是相反的。 本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口。这里介绍wxPython : 根据自己的操作系统下载相应版本。 安装&am…