Mir*_*ral 45 git merge git-squash
我正在开发一个功能分支.
因此,当前的提交历史记录如下所示.从现在到旧:
在将我的功能分支合并到主控之前,如何将3个提交压缩为1?
Aur*_*eau 210
假设功能分支被调用feature并且主分支main:
从以下位置创建临时分支main:
git checkout -b temp main
将分支压feature入:
git merge --squash feature
提交更改(提交消息包含所有压缩的提交消息):
git commit
返回分支feature并将其指向temp分支:
git checkout feature
git reset --hard temp
删除临时分支:
git branch -d temp
Kri*_*ján 26
您可以rebase -i从commit 2父级开始(即master,您从中分支的提交.当您进入合并提交时,您可能不得不重新解决冲突.
所以如果你的历史看起来像
  * D commit 3 (HEAD)
  * M merge
 /|
| * C commit 2
* | B commit on master
|/
* A (master)
从开始git rebase -i A.你会看到所有提交的名单既包括master和your_branch,但不合并提交.pick第一个(B或者C,取决于时间)和squash其余的.
she*_*run 12
您可以使用我专门为此任务创建的工具:
https://github.com/sheerun/git-squash
只需要合并master分支,然后运行squashing命令:
git merge master
git squash master
小智 6
我发现不必重新解决冲突的唯一方法是:
给定分支主分支工作,执行以下步骤:
git checkout -b work-squashed `git merge-base main work`
这将从您合并到工作分支的最后一个主提交创建一个新分支。
git diff work-squashed...work | patch -p1
这会获取并应用于工作目录中合并到工作的主上最后一次提交与工作分支的提示之间的所有更改。换句话说,所有的工作,包括已解决的冲突。
此时您需要处理工作分支上添加/删除的文件,因为 patch 不是 git。它不知道 git 正在跟踪哪些文件。因此,您需要 git add/git rm 直到所有文件都被计算在内。然后,您只需将更改作为单个提交提交即可。
| 归档时间: | 
 | 
| 查看次数: | 25475 次 | 
| 最近记录: |