Squash Git使用Git Rebase进行*非交互*提交 [英] Squash Git commits *non-interactively* with git rebase

查看:0
本文介绍了Squash Git使用Git Rebase进行*非交互*提交的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种使用git rebase挤压提交的方法,但不是以交互方式进行的。我的问题是,我们是否可以使用git merge-base找到共同的祖先来"向下合并",然后挤压所有未共享的提交?

例如:

git init
# make changes
git add . && git commit -am "first"
git checkout -b dev
# make changes to dev 
# *(in the meantime, someone else makes changes to remote master)*
git add . && git commit -am "second"
SHARED=$(git merge-base dev master)
git rebase ${SHARED}
由于在此期间没有对master进行任何更改,因此我不确定此脚本是否会执行任何操作。但它肯定不会做的是挤压提交。有没有什么办法可以压制在dev分支上所做的、不在master中的所有提交?

也许最好的做法是重新基址,然后在后面加上:

git reset --soft ${SHARED}

reset --soft命令应压缩提交

明确一点,这是我要找的东西:

  1. 清除Git Rebase提供的线性历史记录
  2. 从功能分支压缩提交,无需不必要的交互

git rebase -i使用交互,我希望避免

推荐答案

以下代码将把dev树放入master的新提交(注意:正如@torek在下面友好地指出的,这不等同于rebase):

git checkout dev         && 
git reset --soft master  && 
git commit

请注意,执行此操作时不应具有未提交的页面或未跟踪的文件。

它的工作原理如下:

  1. checkout dev将更新HEAD、您的索引(临时区域)和工作树,以匹配dev
  2. 的存储库状态
  3. reset --soft master不会影响索引或工作树(这意味着临时区域中的所有文件将准确反映dev处的存储库状态),但将指向HEADmaster
  4. commit将提交您的索引(对应于dev)并前进master

&&确保在任何操作失败时脚本不会继续。

这篇关于Squash Git使用Git Rebase进行*非交互*提交的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆