【问题标题】:git: how to not delete files when rebasing commits with file deletiongit:如何在通过文件删除重新提交提交时不删除文件
【发布时间】:2011-01-29 09:30:05
【问题描述】:

我有一个分支,我想根据我的 master 上的最新提交进行 rebase。问题是 master 上的一个干预提交是删除并忽略一组特定的文件(请参阅this question)。

如果我只是做一个直接的变基,这些文件将再次被删除。有没有这样做,inside git,而不是手动将所有文件复制出来,然后再将它们复制回来?

或者我应该做一些事情,比如从 master 创建一个新分支,然后只合并来自旧分支的提交?

尝试ascii艺术:

master    branch
  |        w  work in progress on branch
  C        |  committed further changes on master
  |        |
  B        /  committed delete/ignore files on master
  |       2  committed changes on branch
  |      /  
  A     /  committed changes on master which I now need to get branch working
  |    1  committed changes on branch
  0___/  created branch

(做艺术时,我意识到我可以从 A 中变基分支,然后在完成后合并,但我仍然想知道是否有办法“正确”地做到这一点)

更新警告任何尝试此操作的人。这里提出的解决方案很好,但是当您再次 checkout master 时,将重新应用 B 提交,并且您会再次丢失所有文件:(

【问题讨论】:

  • 您的分支只需要 A,还是 A、C 和 master HEAD?
  • @VonC,好吧,我最初认为所有这些,但我现在只用 A 就可以了。最终,我希望在最后(分支开发完成时)变基将所有内容都带入主“流”,但我想更糟糕的是我可以在最后合并。

标签: git rebase git-rebase


【解决方案1】:

根据您的评论,我认为您需要在 master except B 之上重新设置 dev 分支。
您不希望看到您在一个分支中删除的文件在另一个分支中被删除。

一种可能的解决方案是:

  • rebase --interactivemaster 重写提交顺序(如果可能)
0--A--C'--B' 主控 \ --1--2--w 开发
  • rebase dev 分支在 C' 之上(代表除 B 之外的所有主提交)
0--A--C'--B' 主控 \ --1'--2'--w' 开发

这意味着您还没有将 master 推送到另一个存储库(否则,对于那些希望将 master 拉到自己的 repo/master 分支中的人来说,这将涉及合并噩梦)

【讨论】:

  • 最后,我在“伤害”之前的提交上进行了重新定位。但绿色勾号是你的。
猜你喜欢
  • 2017-09-18
  • 2012-09-10
  • 2021-12-31
  • 2013-05-09
  • 2012-08-11
  • 2020-07-18
  • 2021-09-23
  • 2014-06-27
  • 1970-01-01
相关资源
最近更新 更多