Sun*_*hah 1101 git git-merge git-squash
我有一个远程Git服务器,这是我想要执行的场景:
对于每个bug /功能,我创建了一个不同的Git分支
我继续使用非官方的Git消息在Git分支中提交我的代码
在顶级存储库中,我们必须使用官方Git消息对一个错误进行一次提交
那么如何将我的分支合并到远程分支,以便他们只为我的所有签到提交一个提交(我甚至想为此提供提交消息)?
aby*_*byx 1811
说你的错误修复分支被调用bugfix
,你想将它合并到master
:
git checkout master
git merge --squash bugfix
git commit
Run Code Online (Sandbox Code Playgroud)
这将从bugfix
分支中获取所有提交,将它们压缩为1次提交,并将其与您的master
分支合并.
说明:
git checkout master
Run Code Online (Sandbox Code Playgroud)
切换到您的master
分支.
git merge --squash bugfix
Run Code Online (Sandbox Code Playgroud)
从bugfix
分支中获取所有提交并将其与当前分支合并.
git commit
Run Code Online (Sandbox Code Playgroud)
从合并的更改中创建单个提交.
省略-m
参数允许您在完成提交之前修改包含来自压缩提交的每条消息的草稿提交消息.
Dan*_*ohn 116
最终为我解释的是一条评论显示:
git checkout main
git merge --squash feature
Run Code Online (Sandbox Code Playgroud)
相当于做:
git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .
Run Code Online (Sandbox Code Playgroud)
当我想将一个功能分支与105(!!)提交合并并将它们全部压缩成一个时,我不想这样做,git rebase -i origin/master
因为我需要单独解决每个中间提交的合并冲突(或者至少是git无法弄清楚自己).使用git merge --squash
获取我想要的结果,用于合并整个功能分支的单个提交.而且,我最多只需要做一次手动冲突解决.
Ada*_*ruk 93
您想要与壁球选项合并.如果你想一次做一个分支就行了.
git merge --squash feature1
Run Code Online (Sandbox Code Playgroud)
如果你想在单次提交的同时合并所有分支,那么首先以交互方式重新绑定并压缩每个特征然后章鱼合并:
git checkout feature1
git rebase -i master
Run Code Online (Sandbox Code Playgroud)
压入一个提交然后重复其他功能.
git checkout master
git merge feature1 feature2 feature3 ...
Run Code Online (Sandbox Code Playgroud)
最后一次合并是"章鱼合并",因为它同时合并了很多分支.
希望这可以帮助
qwe*_*guy 21
如果您已经git merge bugfix
打开main
,可以将合并提交压缩为:
git reset --soft HEAD^1
git commit
Run Code Online (Sandbox Code Playgroud)
Vag*_*iou 13
将newFeature
分支合并到master
自定义提交中:
git merge --squash newFeature && git commit -m 'Your custom commit message';
Run Code Online (Sandbox Code Playgroud)
相反,如果你这样做
git merge --squash newFeature && git commit
您将收到一条提交消息newFeature
,其中包含您可以自定义的所有分支提交.
假设您在 feature/task1 中进行了多次提交。
转到您的项目分支 (project/my_project)
git checkout project/my_project
Run Code Online (Sandbox Code Playgroud)
创建一个新分支(feature/task1_bugfix)
git checkout -b feature/task1_bugfix
Run Code Online (Sandbox Code Playgroud)
与--squash
选项合并
git merge --squash feature/task1
Run Code Online (Sandbox Code Playgroud)
创建单个提交
git commit -am "add single comments"
Run Code Online (Sandbox Code Playgroud)
推你的分支
git push --set-upstream origin feature/task1_bugfix
Run Code Online (Sandbox Code Playgroud)
我知道这个问题不是专门针对Github的,但是由于Github的使用如此广泛,这是我一直在寻找的答案,因此我将在这里分享。
Github可以执行南瓜合并,具体取决于为存储库启用的合并选项。
如果启用了南瓜合并,则“压缩并合并”选项应出现在“合并”按钮下的下拉列表中。
在推送之前压缩您的本地分支:
如果尚未签出,请签出相关分支以进行处理。
找到您想要保留的最旧提交的 sha。
从该提交创建/签出一个新分支 (tmp1)。
git checkout -b tmp1 <sha1-of-commit>
将原来的分支合并到新的分支中。
git merge --squash <original branch>
使用摘要提交消息提交合并创建的更改。
git commit -m <msg>
检查你想要压缩的原始分支。
git checkout <branch>
重置为您希望保留的原始提交 sha。
git reset --soft <sha1>
基于新的 tmp1 分支对此分支进行变基。
git rebase tmp1
就是这样 - 一旦你确定一切正常,就删除临时 tmp1 分支。
归档时间: |
|
查看次数: |
521917 次 |
最近记录: |