Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何将多个提交合并到另一个分支上作为单个压缩提交?_Git_Git Merge_Git Squash - Fatal编程技术网

Git 如何将多个提交合并到另一个分支上作为单个压缩提交?

Git 如何将多个提交合并到另一个分支上作为单个压缩提交?,git,git-merge,git-squash,Git,Git Merge,Git Squash,我有一个远程Git服务器,下面是我想要执行的场景: 对于每个bug/特性,我创建了一个不同的Git分支 我继续在Git分支中使用非官方Git消息提交代码 在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交 那么,如何将我的分支合并到远程分支,以便它们只为我的所有签入获取一个提交(我甚至想为此提供提交消息)?您想使用挤压选项合并。如果你想一次做一个分支的话 git merge --squash feature1 如果要在单个提交的同时合并所有分支,则首先以交互方式重新设置基础

我有一个远程Git服务器,下面是我想要执行的场景:

  • 对于每个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 ...
最后一次合并是“八达通合并”,因为它同时合并了很多分支


希望这有助于您合并壁球选项。如果你想一次做一个分支的话

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 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
可以得到我想要的结果,即合并整个功能分支的单个提交。而且,我最多只需要做一次手动冲突解决。

最终为我澄清的是:

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

如果您已经在
main
上进行了
git merge错误修复
,您可以使用以下方法将合并提交压缩为一个:

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
分支提交


我在这里详细解释了它:

合并
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合并--挤压原点/特征/
这不会提交它,允许您先查看它


然后提交并完成此新分支的功能,并删除/忽略旧分支(您开发的分支)。

创建新功能

通过终端/外壳:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>
git签出原点/特征/
git合并--挤压原点/特征/
这不是承诺,而是允许你
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