Git 如何将多个提交合并到另一个分支上作为单个压缩提交?
我有一个远程Git服务器,下面是我想要执行的场景:Git 如何将多个提交合并到另一个分支上作为单个压缩提交?,git,git-merge,git-squash,Git,Git Merge,Git Squash,我有一个远程Git服务器,下面是我想要执行的场景: 对于每个bug/特性,我创建了一个不同的Git分支 我继续在Git分支中使用非官方Git消息提交代码 在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交 那么,如何将我的分支合并到远程分支,以便它们只为我的所有签入获取一个提交(我甚至想为此提供提交消息)?您想使用挤压选项合并。如果你想一次做一个分支的话 git merge --squash feature1 如果要在单个提交的同时合并所有分支,则首先以交互方式重新设置基础
- 对于每个bug/特性,我创建了一个不同的Git分支
- 我继续在Git分支中使用非官方Git消息提交代码
- 在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交
那么,如何将我的分支合并到远程分支,以便它们只为我的所有签入获取一个提交(我甚至想为此提供提交消息)?您想使用挤压选项合并。如果你想一次做一个分支的话
git merge --squash feature1
如果要在单个提交的同时合并所有分支,则首先以交互方式重新设置基础并挤压每个功能,然后八达通合并:
git checkout feature1
git rebase -i master
压缩为一个提交,然后重复其他功能
git checkout master
git merge feature1 feature2 feature3 ...
最后一次合并是“八达通合并”,因为它同时合并了很多分支
希望这有助于说您的bug fix分支名为
bug fix
,您希望将其合并到master
:
git checkout master
git merge --squash bugfix
git commit
这将从错误修复
分支获取所有提交,将它们压缩为一个提交,并将其与主
分支合并
git merge --squash bugfix
说明:
git checkout master
切换到您的master
分支
git merge --squash bugfix
从错误修复
分支获取所有提交,并将其分组,以便与当前分支进行1次提交。(不显示合并提交;您可以在提交之前手动解决冲突) 从合并的更改创建单个提交
省略
-m
参数可以让您在完成提交之前修改包含压缩提交中的每条消息的提交消息草稿。最终为我清除的是显示:
git checkout main
git merge --squash feature
等同于做:
git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .
git签出功能
git diff main>feature.patch
git签出主
patch-p1
当我想合并一个包含105(!!)个提交的功能分支并将它们全部压缩为一个时,我不想
git-rebase-I origin/master
,因为我需要分别解决中间提交的每个的合并冲突(或者至少是git自己无法解决的那些)。使用git merge--squash
可以得到我想要的结果,即合并整个功能分支的单个提交。而且,我最多只需要执行一次手动冲突解决。如果您已经在main
上安装了git merge bug修复程序,您可以通过以下方式将合并提交压缩为一个:
git reset --soft HEAD^1
git commit
使用自定义提交将newFeature
分支合并到master
:
git merge --squash newFeature && git commit -m 'Your custom commit message';
如果相反,你会这样做
git合并--squash newFeature和&git commit
您将获得一条提交消息,该消息将包括您可以自定义的所有newFeature
分支提交
我在这里详细解释了它:对于Git
创建新功能
通过终端/外壳:
git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>
git签出原点/特征/
git合并--挤压原点/特征/
这不会提交它,允许您先查看它
然后提交并完成此新分支中的功能,并删除/忽略旧分支(您开发的分支)。假设您在功能/task1中使用多个提交
转到您的项目分支(项目/my_项目)
创建新分支(功能/任务1\u错误修复)
使用--squash
选项合并
git merge --squash feature/task1
创建单个提交
git commit -am "add single comments"
推你的树枝
git push --set-upstream origin feature/task1_bugfix
我知道这个问题并不是专门针对Github的,但由于Github的使用非常广泛,这就是我一直在寻找的答案,我将在这里分享
Github能够执行挤压合并,具体取决于为存储库启用的合并选项
如果已启用挤压合并,则“挤压和合并”选项应出现在“合并”按钮下的下拉列表中
如果出现错误:无法提交,因为您有未合并的文件
git checkout master
git merge --squash bugfix
git add .
git commit -m "Message"
修复了所有冲突文件
git add .
你也可以使用
git add [filename]
要在推压本地分支之前将其压扁,请执行以下操作:
如果尚未签出要处理的分支,请签出该分支
找到您希望保留的最早提交的sha
从该提交创建/签出新分支(tmp1)
git签出-b tmp1
通过挤压将原始分支合并到新分支中
git合并--squash
使用摘要提交消息提交合并创建的更改
git提交-m
签出要挤压的原始分支
git签出
重置为您希望保留的原始提交sha
git重置——软
基于新的tmp1分支重新设置此分支的基础
git-rebase-tmp1
就这样-一旦确定一切正常,现在删除临时tmp1分支
您可以使用我创建的工具简化此过程:。例如,要挤压已从主分支分支分支的要素分支上的所有提交,请写入:
git squash master
git push --force
使用
看看发生了什么
然后
然后
现在是最后但并非最不重要的时刻
git push -u origin master
在这里,origin
可以是您喜欢的其他远程分支。您的功能分支已经完成并准备好提交给master、development或其他目标分支,只需一次提交
git checkout YOUR_RELEASE_BRANCH
git pull
git checkout -b A_NEW_BRANCH
git merge --squash YOUR_BRANCH_WITH_MULTIPLE_COMMITS
git commit -am "squashing all commits into one"
git push --set-upstream origin A_NEW_BRANCH
- 转到合并分支:git签出主机和git pull
- 从干净的本地master创建一个工作分支:git checkout-b work
- 合并在工作时挤压您的特征分支:git Merge——挤压您的特征分支
- 使用默认值或新消息提交:git Commit
git status
git checkout master
git merge --squash bugfix
git add (add which files you want or use wildcard command like ".")
git commit -m "message"
git push -u origin master
git checkout YOUR_RELEASE_BRANCH
git pull
git checkout -b A_NEW_BRANCH
git merge --squash YOUR_BRANCH_WITH_MULTIPLE_COMMITS
git commit -am "squashing all commits into one"
git push --set-upstream origin A_NEW_BRANCH