2011-08-23 265 views
0

可能重複:
How to delete a 'git commit'刪除使用Git提交

我是新來的git和我遇到的情況,我需要一些幫助。 我克隆了一個遠程倉庫到我的電腦,然後打開一個名爲「meir」的新分支。

實踐的目的我第一次COMMITED我在文件上做了一些改動。之後,我按照自己想要的方式更改文件並再次提交。然後我將本地分支推送到遠程存儲庫。

的問題是,我第一次提交這是一個測試,我不希望它是在遠程服務器上。我想了解2種可能的解決方法:

  1. 刪除本地和遠程存儲庫上的遠程「meir」分支並重新開始。
  2. 只刪除第一次提交,然後再次推分支到服務器,因此它也將失去第一次提交。

什麼命令,我需要運行,以實現每個選項?

感謝, 梅厄

+1

看看這個答案:http://stackoverflow.com/questions/1338728/how-to-delete-a-git-commit – timbooo

回答

2

一般來說,你應該不會改變提交歷史你遠程倉庫中被推到公衆分支後。這會對從遠程存儲庫中拉出/克隆的人造成痛苦。

但如果你真的想這樣做,你可以使用互動的rebase而被迫推:

  1. 使用git變基-i壁球第一與第二承諾,使當地分支機構 機的安裝您希望遠程分支的方式。
  2. 使用git推-f(適當分支規範),以「力推」到遠程分支。沒有-f的正常git push會抱怨push不是快進,並且會拒絕它。

另一種選擇是與git push origin :meir刪除遠程分支「梅厄」,與git rebase -i resturcture本地資源庫,然後推爲常。

1

有做這件事的多種方式,但他們都不recommnded雖然 所以,在您自擔風險使用它們。

推提交

使用衍合

如果你有2的一個承諾&希望只是其中一個推,這是不是最新的。

  1. GIT中復位-hard <第二提交ID>
  2. GIT中推
  3. GIT中復位-hard <第一提交ID>

與對應於第二這個唯一變化提交ID將被推&你的最新提交將不會被推送。

但是,如果最新的承諾,必須推不出二日提交,你必須先扭轉提交

  1. git的日誌 - 注意53259b225之前提交ID。讓我們說它是XXXXXXXX
  2. git的變基-i XXXXXXXX

在打開的編輯器,你應該看到兩行代表53259b225 & 227552392像

您提交挑227552392等等等等 挑53259b225等等等等

重新排序這兩條線看起來像

挑53259b225等等等等 挑227552392等等等等

然後保存該文件。

有了這個,你基本上改變了提交的順序。如果你在兩個提交中處理了不同的文件集,那麼這將是一個相對簡單的過程。如果沒有,那麼你可能有一些合併做。

如果,如果你認爲你有搞砸任何時間點,那麼也可以把命令

  1. git的變基--abort帶你回到你的數據流是什麼樣子,你開始之前的互動變基。

使用壁球

  1. 做「git的日誌」,並注意你的頭提交(第一次提交的清單),並注意「基地提交」所做的更改(提交之前(時間)你正在替換的第一個提交)。確保沒有文件添加索引。
  2. 執行「git reset --hard」(使用此命令時要小心;確保上述步驟)。
  3. 做「git merge --squash」 - 這將撤銷提交併且所有提交的文件將被暫存。
  4. 執行「git status」等並驗證預期的更改是否在您的索引(和工作樹)中。
  5. ,如果你不想推的任何文件,做git的復位頭或 如果你想修改這些文件,使這些變化和階段他們
  6. 做「git的承諾-M‘’」 。

正如你所看到的,這也可以用來合併幾個提交到一個。