Windows 7上的SourceTree 1.6.4.0.
让我们说以下是我的出发点:

C <- master
/
- A - B <- topic
Run Code Online (Sandbox Code Playgroud)
我想把主题改成主人.
我的目标是:
C - A - B
^ ^
master topic
Run Code Online (Sandbox Code Playgroud)
但我最终得到:

那我可以做
git push origin topic -f
Run Code Online (Sandbox Code Playgroud)
我得到了预期的结果,但在SourceTree中执行此操作的正确方法是什么?
所以我的历史看起来像这样:
o---o---o---o master
\
o---o---o A
\
o B
所以,解释一下:
A从哪个分支开始masterB(只有1个提交)从哪个开始A我想要的是这个:
o---o---o---o master
\
o---o---o A
\
o B
我做的是:
1).
git checkout A
git rebase master
这导致了许多冲突,经过一段时间的修复后,出现了以下历史:
o---o---o---o master
\
o---o---o A
这正是我想要的.
(我不知道B现在在哪里)
2).
在此之后我做了很多南瓜并改变了提交的顺序A,使历史看起来像我想要的.
3).
现在,我还想做的是:
git checkout B
git rebase A
然而,这似乎不起作用,我不知道为什么.如果我这样做,git log我会在执行第1步之前看到那些提交.
此外,我得到了我在步骤1中已经解决的大量冲突.我花了很多时间去做,不想再这样做了.
这个例子建议使用--onto,我做了:
git checkout B
git rebase --onto A
但是这会B完全删除提交,A并B指向同一个提交,即最后一个提交 …
我使用git作为本地源控制系统,主要用于历史和差异跟踪.我仍然希望使用rebase来对我将定期制作的WIP提交进行修复/压缩.当我尝试做的时候git rebase -i,我得到以下内容:
There is no tracking information for the current branch.
Please specify which branch you want to rebase against.
See git-rebase(1) for details
git rebase <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=<remote>/<branch> MyBranch
Run Code Online (Sandbox Code Playgroud)
看来git不希望你在没有上游遥控器的情况下使用交互式rebase?我怎么做?
我收到这条消息:
First, rewinding head to replay your work on top of it...
Run Code Online (Sandbox Code Playgroud)
每次我做一个git pull --rebase origin <branch>,但是我想放弃我可能在它上面重播的所有工作.基本上我想仅在没有我的工作的情况下重新设置原始分支.我怎样才能清理那些在我尝试拉动底板时错误出现的提交?同样,我的目标只是在不使用我的工作的情况下将原始分支的确切快照拉出来.提前致谢.
有一个与此类似的问题,但其范围太笼统,而且响应过于复杂。我的问题很准时
当从我的分支MyBranch进行变基操作git rebase master
并发生冲突时
哪个是传入变化?当前的变化是什么?
请不要关闭这个问题,将其链接到之前所说的过于笼统和过于复杂的答案,该答案涵盖变基、合并等。这个问题仅与变基有关
我已经开始在我的项目中使用Git,其中前两个提交只是一些初始设置(.gitignore和.gitattributes),第三个提交M2添加了SVN主干的内容:
I1 -- I2 -- M2 -- N -- .. -- Z
Run Code Online (Sandbox Code Playgroud)
我已经在名为svn的分支中导入了SVN历史记录,其中M1是SVN中继(内容与M2相同,除了.gitignore和.gitattributes):
A -- B -- ... -- K -- L -- M1
Run Code Online (Sandbox Code Playgroud)
问:合并两个分支的最佳方法是什么?
我可以将M1和M2合并到M3中,然后重新绑定,但我不知道如何删除I1和I2提交,如果我可以安全地删除M3提交(我已经找到一些建议来保留合并提交,但是这种情况M3不再需要了).
A -- B -- ... -- K -- L -- M1
\
M3 -- N' -- .. -- Z'
/
I1 -- I2 -- M2 -- N -- .. -- Z …Run Code Online (Sandbox Code Playgroud) 我不小心使用--rebase参数从主回购中删除了一些更改.
如何从rebase期间创建的备份中恢复原始存储库状态?
我想做一些类似于git rebase但没有折叠并行提交的东西.
假设我有以下提交:
B (bar)
/
A-C-D (foo)
Run Code Online (Sandbox Code Playgroud)
现在我想在分支foo中将D引入的更改引入C中,并将它们应用于分支栏中的B. 所以我最终得到以下结果:
B-E (bar)
/
A-C-D (foo)
Run Code Online (Sandbox Code Playgroud)
提交B和E之间的差异等于提交C和D之间的差异.这可能吗?有没有办法在不创建补丁的情况下完成?
首先,正如标题所说,甚至可以在一个步骤(即不是fetch那时rebase)做一个pull --rebase?
其次,Visual Studio中的一个设置是强制内置的Team Explorer git工具始终执行pull --rebase而不是标准pull (fetch/merge).
我知道你可以在全局或项目配置文件中设置默认值git config branch.autosetuprebase always,但我想特别找出Visual Studio是否可以更新/更改该设置或具有类似的选项,就像大多数其他GUI一样.我找不到任何东西,所以似乎没有,因此问题.
git rebase visual-studio visual-studio-2013 visual-studio-2015
我知道Rebase是一个(捆绑式)扩展,而Graft是一个核心功能(取代了Transplant(捆绑)扩展).
graft 记录为:
将其他分支的更改复制到当前分支
此命令使用Mercurial的合并逻辑从其他分支复制单个更改,而不在历史记录图中合并分支.这有时被称为"backporting"或"cherry-picking".
rebase 记录为:
Rebase允许在Mercurial的历史中移动提交(使用一系列内部合并).这有很多用途:
- 在分支之间移动变更集
- "线性化"历史
- 重新排序变更集
- 将多个更改折叠为一个更改集
两者似乎都使用合并来移动或复制分支之间的变更集.
嫁接副本.Rebase移动.但rebase --keep副本.
因此,似乎我可以实现以任何方式复制变更集的目标.我使用哪一个是否重要?我什么时候应该更喜欢一个?
例如,只有在复制到不同的命名分支时才能使用移植?或者只有在只有一个变更集时?
编辑:可能是rebase是一个潜在的不安全的移植超集,但是只能draft在开发期间用于编辑本地历史记录的变更集,而移植是一个安全的rebase子集,可以public在维护后用于变换集以进行反向移植?
rebase ×10
git ×8
branch ×2
git-rebase ×2
mercurial ×2
backup ×1
git-branch ×1
merge ×1
restore ×1