因此,我们项目的开发工作流程是这样的:我们创建一个任务/错误票据,然后我们分离master以处理任务/错误,并最终将其合并回master.我们希望master上的提交有很好的消息.在任务分支上提交的人可能没有好的提交消息,这没关系,但是如果要合并分支,那些带有不干净消息的提交将进入主服务器.
解决此问题的一种方法是始终使用--squash与master合并.这样,您就有机会提供良好的提交消息,并将整个提交范围视为一个.我想知道是否有办法强制执行?意思是,如果我们可以让git服务器拒绝不被压缩的合并?
我git rebase -i没有按照我期望阅读各种在线文档和教程的方式遇到一些麻烦.
我正试图将我的最后四个提交压缩成一个.想象一下dev具有远程origin/dev和提交的分支
A -> B -> C -> D -> E
? ? dev
? origin/dev
Run Code Online (Sandbox Code Playgroud)
我想在这里结束:
? dev
A -> F
?
? origin/dev
Run Code Online (Sandbox Code Playgroud)
其中F包含来自B,C,D和E的所有变化.所以,鉴于我已经dev检查过,我应该能够运行git rebase -i origin/dev或者git rebase -i HEAD~4然后压缩C,D和E,对吗?
这是我的问题:运行任何一个rebase命令都不会弹出一个git窗口来做任何事情.控制台只返回:
Successfully rebased and updated refs/heads/dev.
Run Code Online (Sandbox Code Playgroud)
我很困惑,为什么交互式rebase无法正常工作?我的Git配置有问题吗?
git config --global rebase.autoSquash 没有回报
我对一些代码进行了重大的重构,在此过程中,我多次提交。尚未将其推送到任何公共仓库。在推送之前,我现在想将提交重新组织成逻辑单元。问题是我不仅要压缩提交内容,还希望将大块重新组织为其他提交内容。
为了清楚起见,我将A与B1,B2,B3一起提交,并将B与B1,B2,B3进行。我想签出A之前的版本,并拥有新的提交C,带有大块A1,A2,B2和新的提交D,带有大块B1,B3,A3。
提前致谢。
我有一个分支,mybranch,有六个提交,源于提交C.我想创建一个新的分支,也基于提交C,有效地包括mybranch的所有提交,压缩成一个提交.最简单的方法是什么?
我需要做到这一点,因为在你git-push之前"壁球"的口号.对于新的分支,我不希望在历史上提到远程服务器的mybranch.我想创建一个用于推送的全新分支的原因是因为我想保留mybranch中的所有提交以供参考.
Git新秀在这里。我将多个提交压缩为一个提交,并将单个提交已推送至远程存储库。现在,我想找回一些压缩的提交。可能吗?
所以我遇到了一个情况,有一个主分支和一个继续它的错误修复分支。我尝试压缩 master 上的一些提交,然后重新修复 bugfix,但遇到了合并冲突。正确的做法是什么?我在本地工作,没有远程。
它看起来像这样:
A - B - C - D - E - F [master]
\
G - H - I - J - K [bugfix]
Run Code Online (Sandbox Code Playgroud)
我想压缩 A - B - C - D - E - F 并且仍然有错误修复继续压缩的主分支。
我执行了多次merge提交,但它们应该是merge --squash相反的.解决冲突花了一天多的时间,所以我不能手工重做合并.
有没有办法将其转换merge为merge --squash?
我有一个大约10个提交的分支.其中3个是合并提交,将master与我的分支合并,并在每次之间添加~500个提交.有没有办法压缩当前分支上的提交?我的历史看起来像这样:
ad54ef86 My Commit 1
ad54ef86 Merge commit
ad54ef86 Others' Commits
....500 more others' commits
ad54ef86 My Commit 2
ad54ef86 My Commit 3
ad54ef86 Merge commit
ad54ef86 Others' Commits
....500 more others' commits
ad54ef86 My Commit 4
...
Run Code Online (Sandbox Code Playgroud)
现在做git rebase -i HEAD~2000和搜索是很多工作.它有办法吗?
编辑:所以这个问题被标记为Squashing最后n次提交的副本.这显然不是我的问题.我想压缩在我当前分支上进行的最后n次提交之后我合并该分支中的另一个分支并获得所有这些提交.
我进行了“挤压并合并”来关闭 PR。虽然现在所有的变化都呈现出来master,但仍然说分支已经分叉,前后仍然有变化。
This branch is 1 commit ahead, 28 commits behind develop.
Run Code Online (Sandbox Code Playgroud)
我该如何解决?后面的 28 个提交是在“压缩和合并”期间被压缩的。我已经通过https://help.github.com/en/github/administering-a-repository/about-merge-methods-on-github#squashing-your-merge-commits,但找不到任何连接。
我假设(错误地?)“挤压并合并”会进行快进合并以防止发散。我不希望所有提交都从develop移动到master,这就是为什么我进行了“压缩和合并”,而不是变基。我想我错过了一些关于挤压和合并的事情。
我已经在 SO 上遇到了类似的问题,但最终建议在合并到master. 但我不想失去历史develop。
假设我在我的分支机构中有100个提交,我已经工作了3个星期.偶尔(每天,真的)我从origin/master拉出来并将它合并到我的分支中.
我怎么能(轻松地)将我的所有提交压缩成一个提交而不会弄乱历史?如果我以某种方式将我的所有提交压缩成一个,当我的pull请求移动到origin/master时,我会破坏合并的origin/master pull吗?
我忘了将文件添加到我已经推送的提交中并为其创建了拉取请求.拉取请求被拒绝(由于其他原因).我现在想要将丢失的文件添加到原始提交中,然后在发出新的拉取请求之前在新提交中执行请求的更改.但是,git rebase将遗留文件的提交压缩到旧文件中会更改提交的哈希值,从而导致对GitHub产生奇怪的影响.有没有办法做我正在尝试或我必须让丢失的文件在自己的提交?
我是唯一使用我的存储库的人.Pull请求是对其他用户的唯一引用.
我的git log命令产生以下内容:
commit 568a9783f75b0c1ab12499beb32b518e19ab60c0 (HEAD -> master, origin/master)
Merge: 7428e09 e7c1537
...
commit 7428e0947bb47a3fdc46a1ea053bd86aa87934c8
...
commit e7c15371f39f4183c5f8c0645051a022851902f2
Merge: e715e8a ae7d067
...
commit ae7d06745891c215cc2980df520656509e4e36ef
...
Run Code Online (Sandbox Code Playgroud)
在提交7428e0947bb47a3fdc46a1ea053bd86aa87934c8(上面第二个)时,一些敏感信息被意外地检入存储库,因此我想用之前的提交来压缩它.
我想按照这里的说明操作:
首先,我删除了敏感信息,然后提交了更改:
git add .
git commit -a -m "Remove sensitive info"
Run Code Online (Sandbox Code Playgroud)
Git日志现在看起来像:
commit d6d1954c10bd71cc33f24222d1e36b3116eb7775 (HEAD -> master)
...
Remove sensitive info
commit 568a9783f75b0c1ab12499beb32b518e19ab60c0 (origin/master)
Merge: 7428e09 e7c1537
commit 7428e0947bb47a3fdc46a1ea053bd86aa87934c8
commit e7c15371f39f4183c5f8c0645051a022851902f2
Merge: e715e8a ae7d067
...
commit ae7d06745891c215cc2980df520656509e4e36ef
...
Run Code Online (Sandbox Code Playgroud)
现在我跑:
git rebase -i origin/master~4 master
Run Code Online (Sandbox Code Playgroud)
我得到:
...
pick ae7d067 ...
pick d6d1954 Remove sensitive …Run Code Online (Sandbox Code Playgroud) 在某些情况下,我在功能分支上执行 git pull 操作,最终得到多个烦人的“合并提交”,我可以理解它们为什么会发生,但我想将它们合并起来,使其看起来像正常提交。
我尝试使用git rebase -i --rebase-merges HEAD~4但无法弄清楚如何压缩合并提交。
我做了进一步的研究,经过大量的挖掘,我能够执行以下操作,使用 rebase 将不需要的合并提交合并到正常提交中,然后在需要时压缩它们:
git checkout feature
git pull # will create merge commits
git checkout featur_backup # to create a backup
git switch --orphan emty_commit
git commit -m "First empty commit for the feature branch" --allow-empty
git switch feature
git rebase empty_commit
git rebase -i --root # this allows you to squash commits
git branch -D empty_commit
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来合并合并提交?
笔记:
git ×13
squash ×13
rebase ×6
merge ×4
commit ×3
github ×2
branch ×1
git-merge ×1
git-squash ×1
pull-request ×1