相关疑难解决方法(0)

git的"rebase --preserve-merges"到底是做什么的(为什么?)

Git的命令文档rebase非常简短:

--preserve-merges
    Instead of ignoring merges, try to recreate them.

This uses the --interactive machinery internally, but combining it
with the --interactive option explicitly is generally not a good idea
unless you know what you are doing (see BUGS below).
Run Code Online (Sandbox Code Playgroud)

那么当你使用时会发生什么--preserve-merges?它与默认行为(没有该标志)有何不同?"重新创建"合并等意味着什么?

git git-rebase

328
推荐指数
3
解决办法
8万
查看次数

git rebase interactive:squash merge提交在一起

我希望有一个简单的解决方案,可以在交互式rebase期间将两个合并提交压缩在一起.

我的存储库看起来像:

   X --- Y --------- M1 -------- M2 (my-feature)
  /                 /           /
 /                 /           /
a --- b --- c --- d --- e --- f (stable)
Run Code Online (Sandbox Code Playgroud)

也就是说,我有一个my-feature最近合并过两次的分支,中间没有真正的提交.我不只是想重新定义my-feature分支,因为它是它自己的已发布分支,我只想将最后两个合并提交压缩成一个(还没有发布那些提交)

   X --- Y ---- M (my-feature)
  /            /
 /            /
a --- ... -- f (stable)
Run Code Online (Sandbox Code Playgroud)

我试过了:

git rebase -p -i M1^
Run Code Online (Sandbox Code Playgroud)

但我得到了:

Refusing to squash a merge: M2
Run Code Online (Sandbox Code Playgroud)

我最后做的是:

git checkout my-feature
git reset --soft HEAD^  # remove the last commit (M2) but keep the changes …
Run Code Online (Sandbox Code Playgroud)

git merge interactive rebase squash

52
推荐指数
3
解决办法
3万
查看次数

Git:如何压缩两者之间合并提交的提交?

我正在开发一个功能分支.

  1. 做了几个提交.压缩提交.
  2. 推送更改远程分支.有冲突.
  3. 合并来自主要的更改,已解决的功能分支上的冲突.(git fetch origin master> git merge FETCH_HEAD>手动解决冲突> git commit> git push)
  4. 我做了一个提交.

因此,当前的提交历史记录如下所示.从现在到旧:

  1. 提交3
  2. 承诺M yyy(合并)
  3. 提交2

在将我的功能分支合并到主控之前,如何将3个提交压缩为1?

git merge git-squash

45
推荐指数
4
解决办法
3万
查看次数

仅变基/重播合并提交

有没有办法自动对大量合并提交进行变基?另一个问题Rebase a Git merge commit 的答案建议使用--preserve-merges,但这也会对非合并提交进行 rebase。

当将功能分支合并到主分支或集成分支,然后发现其他人刚刚推送了更改时,这种行为是不需要的。此外,能够将开发分支重新建立到新的主提交上,或者从开发中删除不会使用的修复也很有用。

例如,考虑到以下情况:

* 7909b1a (origin/master) Merge bug/456
|\
| * f9d43b6 (origin/bug/456) 456 - Change color
|/
| * 32666f3 (HEAD, master) Merge branch 'bug/123'
| |\
|/ /
| * 0939652 (origin/bug/123, bug/123) 123 - Fix Spelling
|/
o 96c9aa9 (tag: v1.1.1)
Run Code Online (Sandbox Code Playgroud)

如果我运行git rebase --preserve-merges origin/master,将产生以下结果:

* (HEAD, master) Merge branch 'bug/123'
|\
| * 8e6ccbe 123 - Fix Spelling
|/
* 7909b1a (origin/master) …
Run Code Online (Sandbox Code Playgroud)

git git-merge git-rebase

5
推荐指数
1
解决办法
1037
查看次数

将分支合并并变基到主分支而不发生冲突

这是我们当前的功能分支工作流程 ->

  • 从 master 创建一个新的功能分支。
  • 将工作提交到功能分支。
  • 当我们努力保持最新状态时,将 master 合并到功能分支中。
  • 如果有冲突就解决。这会在功能分支中创建“将 master 合并到 Feature_Branch”提交。
  • 当功能分支完成后,将功能分支合并回主分支。

问题:

如果我们将功能分支合并到主分支中,那么就没有问题。如果我们进行定期合并,然后重新建立基础,我们必须再次解决所有冲突。在具有 100 个提交的功能分支上,这是一个很大的痛苦。

有没有办法将功能分支合并回master并rebase而不发生冲突?

git

4
推荐指数
1
解决办法
6814
查看次数

压缩合并之前的旧 git 提交

我正在清理 git 存储库以使其更易于理解。到目前为止,它都是私人的,所以我可以改变历史。

大多数情况下,我一直将提交压缩成有意义的集合。

问题在于,该项目在其历史早期是其他两个项目的合并。我在压缩合并之前的提交时遇到问题。

我的问题是:我该怎么做?

具体来说:我有

xxxxxx * master: Latest commit
xxxxxx * another commit
xxxxxx *   Merge projectA and projectB
xxxxxx |\
0000A6 | * a minor commit in project A
0000A5 | * another minor commit
Run Code Online (Sandbox Code Playgroud)

我想把 0000A5 和 0000A6 压在一起。

当我尝试交互式变基时,magit(我碰巧使用的 git 的 emacs 前端)警告我“尽管合并在变基范围内,但仍继续吗?” 当我继续时,它会失败(取自我的实际工作,而不是上面的简化示例)。我不确定合并之前的重新提交提交是否存在问题,或者其他问题(“未跟踪文件”行是可疑的,因为合并包括将客户端项目移动到更大的“client/”子目录中)项目。

Last commands done (5 commands done):
   pick fb5de84 Simplified schema:
   squash 96ac7ac Revert schema to full complexity
Next commands to do (29 remaining commands):
   pick 4ad389a Just indentation, for readability …
Run Code Online (Sandbox Code Playgroud)

git merge rebase magit

1
推荐指数
1
解决办法
995
查看次数

标签 统计

git ×6

merge ×3

git-rebase ×2

rebase ×2

git-merge ×1

git-squash ×1

interactive ×1

magit ×1

squash ×1