将来自另一个分支的所有更改合并为单个提交
在Git中,有没有办法将所有更改从一个分支合并到另一个分支,但是同时压缩到一个提交?
我经常在一个单独的分支中处理一个新功能,并且会定期提交/推送 - 主要用于备份或将我正在处理的内容转移到另一台机器上。 大多数提交说“功能xxx WIP”或多余的东西。
一旦完成该工作并且我想将WIP分支合并回master,我想丢弃所有这些中间提交,并且只需要一个干净的提交。
是否有捷径可寻?
或者,一个命令如何压缩分支上的所有提交,因为它是分支的点?
#1楼
您可以使用“rebase”命令执行此操作。 我们将分支称为“主要”和“功能”:
git checkout feature
git rebase main
rebase命令将重放“feature”上的所有提交,作为一个提交,其父级等于“main”。
你可能想要在git rebase main
git merge main
之前运行git merge main
,如果“main”自创建“feature”(或从最近的合并以来)发生了变化。 这样,如果发生合并冲突,您仍然可以获得完整的历史记录。
在rebase之后,您可以将分支合并到main,这将导致快进合并:
git checkout main
git merge feature
有关概述,请参阅了解Git Conceptually的rebase页面
#2楼
在你的功能分支上试试git rebase -i master
。 然后,你可以将除了一个'pick'之外的所有内容更改为'squash'来组合提交。 请参阅使用rebase压缩提交
最后,您可以从master分支进行合并。
#3楼
找到了! 合并命令有一个--squash
选项
git checkout master
git merge --squash WIP
在这一点上,一切都被合并,可能是冲突的,但没有提交。 所以我现在可以:
git add .
git commit -m "Merged WIP"
#4楼
另一种选择是git merge --squash <feature branch>
然后最后做一个git commit
。
来自Git合并
--squash
--no-squash
生成工作树和索引状态,好像发生了真正的合并(合并信息除外),但实际上没有提交或移动
HEAD
,也没有记录$GIT_DIR/MERGE_HEAD
导致下一个git commit
命令创建合并承诺。 这允许您在当前分支之上创建单个提交,其效果与合并另一个分支(或章鱼的情况下更多)相同。
#5楼
git merge --squash <feature branch>
是一个不错的选择。“git commit”告诉你所有功能分支提交消息,你可以选择保留它。
对于较少的提交合并。
git merge do x times --git reset HEAD ^ --soft then git commit。
风险 - 删除的文件可能会返回。
#6楼
我想把我主人的所有提交压缩成一个。 我没试成功:
$ git checkout --orphan new_master
$ git merge --squash master
fatal: Squash commit into empty head not supported yet
所以我这样做了:
$ tar cf /tmp/git.tar --exclude .git .
$ git checkout --orphan new_master
$ tar xf /tmp/git.tar
$ git commit -m "Initial commit"
这很好用。
#7楼
我创建了自己的git别名来做到这一点。 我称之为git freebase
! 它将采用您现有的混乱,不可重复的功能分支并重新创建它,以便它成为一个具有相同名称的新分支,其提交压缩到一个提交并重新定位到您指定的分支(默认为master)。 在最后,它将允许您使用您喜欢的任何提交消息为您的新“自由”分支。
通过在.gitconfig中放置以下别名来安装它:
[alias]freebase = "!f() { \TOPIC="$(git branch | grep '\\*' | cut -d ' ' -f2)"; \NEWBASE="${1:-master}"; \PREVSHA1="$(git rev-parse HEAD)"; \echo "Freebaseing $TOPIC onto $NEWBASE, previous sha1 was $PREVSHA1"; \echo "---"; \git reset --hard "$NEWBASE"; \git merge --squash "$PREVSHA1"; \git commit; \}; f"
通过运行以下命令在功能分支中使用它: git freebase <new-base>
我只测试了几次,所以先阅读它并确保你想要运行它。 作为一个小安全措施,它会打印起始sha1,因此如果出现任何问题,您应该能够恢复旧分支。
我将在github上的dotfiles repo中维护它: https : //github.com/stevecrozz/dotfiles/blob/master/.gitconfig
将来自另一个分支的所有更改合并为单个提交相关推荐
- gif 分支的新建与合并
分支的新建与合并 现在让我们来看一个简单的分支与合并的例子,实际工作中大体也会用到这样的工作流程: 开发某个网站. 为实现某个新的需求,创建一个分支. 在这个分支上开展工作. 假设此时,你突然接到一个 ...
- git / 如何将其他分支的某些 commit 合并到当前分支中?
前几天被问到如何用 git 将其他分支的某些 commit 合并到当前分支的问题,当时一点概念都没有,现在总结一下. 需要用到的指令为 cherry-pick,栗子: git cherry-pick ...
- 将fork出来的分支与原项目合并
转载地址:如何同步 Github fork 出来的分支 git remote add upstream git@github.com:original_owner/original_repositor ...
- git 图形化工具 GitKraken 的使用 —— 分支的创建与合并
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 分支管理是Git工作流的重点 在之前的文章中通过GitKraken可以很清楚的看到,每一次commi ...
- Git如何合并分支到主干及合并主干到分支
Git如何合并分支到主干及合并主干到分支 文章目录 Git如何合并分支到主干及合并主干到分支 零.预备知识 一.创建分支 二.合并分支到主干 三.合并主干到分支 参考资料 精益开发实践用看板管理大型项 ...
- git命令判断当前分支是否与master合并
git命令判断当前分支是否与master合并 有的时候在编写批处理脚本时,需要判断git的当前分支是否与目标分支合并,则可以通过下面的脚本进行判断. is_merged=0 git log origi ...
- git操作---分支的创建和合并
git操作---分支的创建和合并 1.分支创建1:git branch <new_branch_name> 2.分支创建2:git checkout -b/-B <new_bra ...
- Git多分支开发时 merge 合并策略
一 . develop.master.hotfix 合并策略 项目一般会有develop.master另个分支develop分支部署在测试环境测试,多个开发工程师把自己的commit都提交到devel ...
- Git 分支与主干的合并
项目一般包含主干和分支,两者的合并是常用的操作. master表示主干的名称,branch表示分支的名称. 1.主干合并分支 Git命令需要在主干下运行,命令执行后,分支的代码同步到了主干. (1)在 ...
最新文章
- O(n)线性构造后缀树详解(一)
- bat脚本注释多行_cmd批处理常用符号详解
- 使用pscp从windows电脑拷贝数据到linux遇到的ssh_init错误
- 【MobX】390- MobX 入门教程(上)
- 【Linux系统编程学习】Linux进程控制原语(fork、exec函数族、wait)
- Peoplesoft取Translate Value标签值的方法
- 交叉熵损失函数原理详解,KL散度
- 关于HTML静态页面(含自动分页)生成的可行性方案
- 《css设计彻底研究》读书笔记之 float 浮动原理
- 栈溢出脚本_污点分析挖掘漏洞演示——如何在8小时内从零发现cve20120158(word溢出漏洞)...
- 《Outlier Analysis》书籍
- 一些用xib加载主界面的过程
- 系统类配置(三)【ubuntu14.04或者ubuntu16.04 配置caffe】
- Spring 中的重试机制,简单、实用!
- 数梅派4b 显示器_无显示器配置树莓派4B
- 服务器四核cpu性能排行,服务器cpu性能排行
- 计算机和软件专业大学排名,全国计算机软件专业大学排名TOP20,清华居然不是第一!...
- scikit-learn中的PCA
- AliOS Things的SDK ESP8266 连接阿里生活物联网平台 配网失败解决方案
- 王立柱《c语言》3.5.4
热门文章
- Java 正则表达式源码解析
- Objective-C NS_OPTIONS 类型的枚举
- (0029) iOS 开发之API HTTP 请求调试网站
- nodejs 运行linux命令,node.js执行shell命令
- oracle分页数据,oracle 分页 数据重复 数据不正确
- 2017-2018-1 20155327 实验五 通讯协议设计
- 程序运行时,内存占用查看
- 报错: eclipse加载maven工程提示pom.xml无法解析org.apache.maven.plugins:maven-resources-plugin:2.3.2...
- php面试题之五——MySQL数据库(基础部分)
- poj 2288 Islands and Bridges_状态压缩dp_哈密尔顿回路问题