Squash Git使用Git Rebase进行*非交互*提交 [英] Squash Git commits *non-interactively* with git rebase
本文介绍了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
命令应压缩提交
明确一点,这是我要找的东西:
- 清除Git Rebase提供的线性历史记录
- 从功能分支压缩提交,无需不必要的交互
git rebase -i
使用交互,我希望避免
推荐答案
以下代码将把dev
树放入master
的新提交(注意:正如@torek在下面友好地指出的,这不等同于rebase):
git checkout dev &&
git reset --soft master &&
git commit
请注意,执行此操作时不应具有未提交的页面或未跟踪的文件。
它的工作原理如下:
checkout dev
将更新HEAD
、您的索引(临时区域)和工作树,以匹配dev
, 的存储库状态
reset --soft master
不会影响索引或工作树(这意味着临时区域中的所有文件将准确反映dev
处的存储库状态),但将指向HEAD
master
和commit
将提交您的索引(对应于dev
)并前进master
。
&&
确保在任何操作失败时脚本不会继续。
这篇关于Squash Git使用Git Rebase进行*非交互*提交的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文