2014-03-07 120 views
0

我試圖從以前的提交(而不是HEAD)中進行分支,但是當我提交這些更改時,不是在分支中保留更改,而是刪除了通過HEAD中那個點的提交。我可以看到這可能是有用的,但我認爲風險投資的重點是永久保留所有提交,以便您可以隨時回到之前的狀態。如何編輯以前的提交,並在不刪除git之前的提交?

如何編輯以前的提交併提交它,而不必在主設備上擦除提交之前的提交?

謝謝!

編輯:

This is the image that lead me to believe my other changes had been deleted

這是導致我相信我的其他變化已被刪除

Here are the hidden branches I thought had been deleted

下面是隱藏的分支我認爲已被刪除的圖像。爲什麼gitk不顯示其他分支(HEAD,master)

+0

我真的不明白你在說什麼。你究竟做了什麼,你最終得到了什麼? – poke

+0

不幸的是我不知道我用了什麼命令。我一直在閱讀教程,並沒有完全理解我一直使用的所有命令。 (因爲這個問題,我做了很多新的命令,所以我不能只看我的歷史記錄) – Jordan

+0

一般提示然後:不要盲目跟隨教程並輸入你不明白的命令。先看看它們,並首先了解它們的作用以及爲什麼現在有必要使用它們。 – poke

回答

3

提交可能不會丟失。首先進行備份。檢查你有什麼分支,以及它們是什麼。如果您確實無法在任何分支中找到您的提交,則可能有興趣瞭解reflog

如果您還沒有安裝庫瀏覽器(我喜歡tig),你可以使用下面的命令檢查你的資料庫:git log --graph --all --oneline --decorate

如何修改先前的承諾,並提交,但不刪除在主人面前的提交?

如果提交編輯是以前的承諾:

  • 讓你想要的變化。
  • 如果您不添加新文件,則可能使用git add -u進行更改。
  • 修改以前的提交,git commit --amend會這樣做,如果您不想編輯提交消息,請添加-C HEAD

如果你想編輯一個較舊的提交,你需要使用rebase。 這可以交互完成:

  • 開始從你想要編輯哪個分支,通常用在你的工作副本沒有變化。
  • 在之前的提交中進行所需的更改。
  • 階段並提交這些更改 - 不要在這裏寫一個合理的提交消息。
  • 運行git rebase -i,這將打開一個編輯器:
    • 移動最後一行(與廢話提交信息),直到它是對線下你要編輯的提交。
    • pick更改爲f(用於修正)。
    • 不作任何其他更改文件
    • 保存並退出
  • 的Git應該修改你剛纔的承諾,包括編輯,並會嘗試衍合上頂部的其他變化。

這會嘗試將您的編輯應用於先前的提交,並在之前的提交和您的編輯之後重新綁定所有後續更改。如果稍後的提交受到編輯的影響,您可能會遇到合併衝突。 Git將提供如何解決這些問題的說明。如果您不理解它們,則可以使用git rebase --abort返回到您開始的位置,並且您的編輯是最新的提交。

請注意,您不應編輯已經推送到共享存儲庫的提交。這很可能造成很多混亂。

+0

謝謝,這正是我需要知道的。 – Jordan

4

很可能沒有東西被擦除。您可能已經創建了一個新的匿名分支。如果您結帳master或您開始的任何分支,則缺失的更改應該仍然存在。

嘗試git log --all;它應該顯示存儲庫中的所有提交。

有一些git命令可以破壞信息,但你可能還沒有這樣做,儘管如果不知道你執行了哪些命令就很難確定。

+0

謝謝,「git log --all」向我展示了隱藏提交的位置。 – Jordan

相關問題