标签: git-rebase

重新分配包括其所有孩子在内的分支

我有以下Git存储库拓扑:

A-B-F (master)
   \   D (feature-a)
    \ /
     C (feature)
      \
       E (feature-b)
Run Code Online (Sandbox Code Playgroud)

通过重新feature分支我希望改变整个子树(包括子分支):

$ git rebase feature master

A-B-F (master)
     \   D (feature-a)
      \ /
       C (feature)
        \
         E (feature-b)
Run Code Online (Sandbox Code Playgroud)

但是,这是实际结果:

      C' (feature)
     /
A-B-F (master)
   \   D (feature-a)
    \ /
     C
      \
       E (feature-b)
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过执行以下方法手动修复它:

$ git rebase --onto feature C feature-a
$ git rebase --onto feature C feature-b
Run Code Online (Sandbox Code Playgroud)

但有没有办法自动重组分支,包括其所有子/后代?

git version-control branch rebase git-rebase

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

我需要在我的主分支中弹出并删除"中间"提交.我该怎么做?

例如,在下面的主分支中,我需要删除提交af5c7bf16e6f04321f966b4231371b21475bc4da,这是由于之前的rebase导致的第二个:

commit 60b413512e616997c8b929012cf9ca56bf5c9113
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Tue Apr 12 23:50:15 2011 +0200

    add generic config/initializers/omniauth.example.rb

commit af5c7bf16e6f04321f966b4231371b21475bc4da
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Fri Apr 22 00:15:50 2011 +0200

    show github user info if logged

commit e6523efada4d75084e81971c4dc2aec621d45530
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Fri Apr 22 17:20:48 2011 +0200

    add multiple .container at blueprint layout

commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
Author: Luca G. Soave <luca.soave@gmail.com>
Date:   Thu Apr 21 19:55:57 2011 +0200

    add %h1 Fantastic Logo + .right for 'Sign …
Run Code Online (Sandbox Code Playgroud)

git github git-rebase git-revert git-reset

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

在有人推送rebase或重置到已发布的分支后,如何恢复/重新同步?

我们都听过一个人应该重订,从未发表的作品,它的危险,等等.但是,我还没有看到张贴如何处理的情况下衍合情况的任何食谱出版.

现在,请注意,只有存储库仅由已知(并且最好是很小)的人群克隆,这才真正可行,这样无论谁推送rebase或重置,都可以通知其他人他们下次需要注意的时候取(!).

如果你没有本地提交foo并且它被重新定位,我看到的一个明显的解决方案将起作用:

git fetch
git checkout foo
git reset --hard origin/foo
Run Code Online (Sandbox Code Playgroud)

foo根据远程存储库,这将简单地抛弃本地状态以支持其历史记录.

但是,如果一个人在该分支机构进行了大量的本地更改,那么如何处理这种情况呢?

git rebase git-rebase git-reset

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

在重新定位git分支时更改时间戳

我已经重新组织了一个分支中的提交,然后它将被公开,导致提交的时间戳处于混合顺序.我宁愿让他们今天只有几秒钟.

显然,这些时间戳也不正确,但由于这是事情上市的时候,我更喜欢在时间上混淆历史.

那么如何告诉git在重新定位时创建新的时间戳?

git git-rebase

83
推荐指数
4
解决办法
2万
查看次数

如何在不需要强制推送的情况下使用git rebase?

为了实现git nirvana,我花了一天时间学习如何在我目前合并的情况下利用rebase.

当我通过我认为是git 101流程(我在下面拼写出来)时,我必须push --force将我的更改推回原点.

我不是唯一的一个-我知道这是覆盖的地面(见图1,2,3,4,5),我理解的技术原因,为什么力是必要的.我的问题是这样的---有歌声底垫的赞美很多(多)发表的博客以及它如何改变他们的生活(见1,2,3,4,列出了几个),但他们没有提到push --force是的一部分他们的流量.然而,几乎现有的stackoverflow问题的每一个答案都说"是的,如果你要改变,你必须使用push --force".

鉴于rebase倡导者的数量和宗教信仰,我不得不相信使用'push -force'并不是rebase流的固有部分,如果经常不得不强迫他们推动,他们就会做错事.

push --force是一件坏事.

所以这是我的流程. 在没有武力的情况下,我能以何种方式获得相同的结果?

简单的例子

两个分支:

  • v1.0 - 发布分支,仅包含补丁
  • 大师 - 下一个主要版本的一切.

我有一些补丁提交和一些提交下一个版本.

premerge

我想将这些补丁合并到我的主人中,以便他们在下一个版本中不会丢失.启蒙前我简单地说:

git checkout master
git merge v1.0
Run Code Online (Sandbox Code Playgroud)

但现在我正在努力

git checkout master
git rebase v1.0
Run Code Online (Sandbox Code Playgroud)

所以现在我在这里:

在此输入图像描述

的时间:

git push
Run Code Online (Sandbox Code Playgroud)

没有骰子.

git git-rebase

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

git pull --rebase和git pull --ff-only之间的区别

假设origin/master已经提交A--B--C并且我local/master已经提交了A--B--D.

如果我使用会发生什么git pull --rebase

如果我使用会发生什么git pull --ff-only

生成的提交树有什么不同吗?

git git-pull git-rebase

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

git从历史记录中删除合并提交

我的Git历史看起来像这样:

Git历史

我想把紫色的提交压成一个.我不希望在我的提交日志中再次看到它们.

我试过做了git rebase -i 1,但即使1是在蓝色分支上(参见图片),我仍然看到我的紫色分支上的每个提交.

如何完全删除紫色分支(来自提交日志)?

git git-merge git-rebase

75
推荐指数
5
解决办法
12万
查看次数

在之前的git合并之后git rebase

我有以下情况:

  • clone从主存储库(X)创建了一个(Y),因为有许多人在Y上工作,我们没有做任何事情rebase,只有merges.当我们想要将(push)Y 传递给X时,我们想做一rebase件事,以便让事情变得干净整洁

问题在于,当rebase我们被要求进行我们在之前merge步骤中已经完成的所有合并时.有没有解决方案,除了意味着重新进行合并的那个?

我预计它会非常简单,因为我们已经解决了冲突的合并.

git merge rebase git-rebase

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

自从改革开始以来,流产的旧git rebase和丢失的提交

扯淡!大约一个星期前,我在尝试清理我的存储库时,正在重新设置一些提交,显然我实际上没有完成它.今天,一个星期和几个提交之后,我从今天开始重新订购一些提交,它告诉我,我已经处于变革的中间.

这应该是复制我的回购以防万一的提示.但我没有...而是我git rebase --abort当时听起来正确.嗯,那不对.它从一周前中止了反转,并将主人的HEAD重置为旧的.假!

我还有其他几个相当近的分支,我已经多次推到远程,但最近的变化似乎永远消失了.我没有适当级别的git-fu知道是否有任何方法可以恢复我的更改.

我搞砸了吗?

编辑 - 哇!多谢你们!git reflog太棒了!我已经完全恢复了......经验教训.标记Tchalvak的答案被接受为第一个发布.

git git-rebase

65
推荐指数
2
解决办法
1万
查看次数

如何知道git rebase是否正在进行中?

当我开始时git rebase -i,我可以发出像git rebase --continue或的命令git rebase --abort.这些命令仅在rebase正在进行时才有效.

我如何知道是否有正在进行的改造?

(我非常感谢关于rebase如何在内部工作的一些细节; git对一个repo做了什么,使它具有"rebase in progress"状态,?)

git git-rebase

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