2014-07-23 101 views
1

所以我做了一個改變了一堆文件,然後創建一個新的分支,並將其推到了一個新的遠程分支如下:Git:推送到遠程分支後回到未分離的更改?

git status 
    # lots of changes listed 
git checkout -b new-branch 
git add . 
git commit -m "pushing to new-branch" 
git push origin new-branch 

然而,當我回到我的主分支,運行git status結果爲:

nothing to commit, working directory clean,我的更改全部沒了。我的印象是,我仍然將所有的變化都列出來,沒有上演。 (發生在我身上的所有變化都轉移到了我的'新分支'上。)有什麼辦法可以恢復到在master分支上進行所有未分離更改的狀態?

謝謝。

+3

更改不會在分支*上分階段(或未分階段)*,只是簡單地分階段進行。一旦承諾,他們不再上演,他們只是承諾。這是混亂的根源嗎?如果不是,我根本不理解這個問題。 – torek

+2

看來你無法理解git的一些基礎知識;我建議你閱讀gitpro書的[「三國」](http://git-scm.com/book/en/Getting-Started-Git-Basics#The-Three-States)子章節。如果你想有效地使用git,理解這個概念是非常重要的。 –

回答

0

當您將更改提交到新分支時,您沒有更多未分離的更改。無論您在哪個分支上(或者您在進行更改之間進行切換),所有分階段更改(git add)都會提交給當前分支。

但是,在您的情況下,如果您需要在主分支中返回所有上次提交的更改,則可以執行回滾(git reset --soft)。通過使這個你要刪除的最後一個提交在你的分支new-branch

git checkout new-branch 
git reset --soft HEAD^ 

做這將回滾在樹枝上,你提出將在升級可用的變化上次提交。

現在您可以結帳主人並進行其他更改並再次提交。

0

運行以下命令:

  1. git的結帳新分支
  2. git的復位--soft HEAD^
  3. git的結帳主
  4. git的狀態

如果是在某些提交之前說謊然後嘗試這個而不是第2步:

git reset --soft HEAD~3 

它將恢復HEAD中最後第四次提交指定的更改。 (您需要根據您不需要的提交的位置更改數字'3'。)

並檢查git狀態。您應該能夠看到您的本地更改,但尚未提交。

0

有沒有什麼辦法可以回到這個狀態,讓我在master分支上進行所有未分離的更改?

我不確定你爲什麼要這樣做。我不推薦它,但是這將這樣的伎倆:

git checkout master # go back to the master branch 
git merge new-branch # merge in the changes you committed in new-branch 
git reset --soft HEAD~1 # make HEAD point to the commit before the merge 
         # this will leave the changes in the index, 
         # in other words, staged 

,你也可以用

git reset --mixed HEAD~1 # make HEAD point to the commit before the merge 
         # this will leave no changes in the index, 
         # in other words, no changes are staged 

替換最後一個命令我建議你瞭解三種狀態:承諾,修改和上演。閱讀here