一千萬個為什麽

搜索

git:如何在重定位文件刪除提交時不刪除文件

我有一個分支機構,我想在我的主人的最新提交上進行修改。問題是master上的其中一個提交是刪除並忽略一組特定的文件(參見這個問題)。

如果我只做一個直接的rebase,這些文件將再次被刪除。無論如何這樣做, 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重新綁定分支,然後在我完成時合並,但我仍然想知道是否有辦法正確地執行此操作)

UPDATE Warning to anyone trying this. The solution proposed here is fine, but when you checkout master again, the B commit will be re-applied, and you lose all your files again :(

最佳答案

從你的評論中,我收集你需要在主之上重新設置dev分支,除了 B.
您不希望看到在一個分支中刪除的文件在另一個分支中被刪除。

一種可能的解決方案是:

  • rebase --interactive master to rewrite commits order (if possible)
    0--A--C'--B'  master
     \
      --1--2--w     dev
  • 在C'之上的rebase dev分支(代表除B之外的所有主提交)
    0--A--C'--B' master 
           \
            --1'--2'--w' dev

這意味著您還沒有將master推送到另一個存儲庫(否則,對於那些希望在自己的repo/master分支中拉取master的人來說,這會涉及合並的噩夢)

轉載註明原文: git:如何在重定位文件刪除提交時不刪除文件