2012-04-26 432 views
4

在開始我的項目之前,我忘了切換到新分支,現在我需要將我的更改推送到新分支(而不是主分支),以便其他人檢查我的工作。我的工作已經完成,但是保存在當地的主人手中。Git - 忘記切換分支

如何將我的更改移動到新的分支,所以當我推它時並不會弄亂主分支,而是創建一個新的遠程分支?

+0

你承諾所有的工作了嗎?如果是這樣,它只是一個提交還是一系列的提交? – 2012-04-26 13:50:19

+0

我相信如此,這將是一個系列。 – Kim 2012-04-26 13:55:07

回答

0

我不知道發生了什麼,但是當我隨後KurzedMetal git的命令,它沒有給我想要的結果。

因此,除了重做我的更改外,沒有其他選擇,儘管在執行硬重置前重新備份了遠程主文件夾以及導出了更改的文件。導出和備份都是毫無價值的,因爲它們包含與本地存儲庫完全相同的內容,因此我的更改是丟失。我曾預計不變。

幸運的是,在我開始解決推送問題之前,我已經隱藏了我的更改。
注意:硬重置後未刪除新創建的文件。

這裏是我的步驟來解決:

  1. 完成你的變化(仍然是
  2. 遠程主拉動的新變化,解決任何衝突
  3. TortoiseGit -> Stash save。輸入一條消息以區別於其他的存儲 - >確定
  4. TortoiseGit -> Show log。選擇最新的主人,然後右鍵單擊並選擇Reset,然後選擇Hard option - >確定
  5. TortoiseGit -> Create Branch。輸入名稱並選中複選框Switch to new branch - >好吧
  6. TortoiseGit -> Stash list。選擇您保存的存儲 - >確定
  7. 現在您可以看到不同文件的列表。對於每個文件,比較差異並再次將更改應用於新重置的文件
  8. 完成後,在本地文件夾內右鍵單擊。您應該看到Git Commit -> "BranchName" ...以上TortoiseGit,選擇第一個
  9. 確認提交哪些文件,然後輸入一個合適的描述 - >確定
  10. 現在你已經準備好pushTortoiseGit -> Push,檢查本地分支是否是您選擇的名稱。如果沒有,那麼你忘了切換分支在5,並且必須從6繼續。

我希望這會幫助別人。要記住的事情:當你開始一個新的功能/非小的改變時切換到一個新的分支

+0

'git stash'只有在你沒有'不承諾任何事情,而且你說你已經多次承諾。 – KurzedMetal 2012-04-27 11:06:48

+0

我說'我相信'。正如你所猜測的那樣,我對使用存儲庫還是很陌生的。一方面,我得到了'Git Bash'的工作 - 我只需要使用'cd'命令導航到我的repo文件夾,因爲'Git Bash'顯然不會在我的repo文件夾中啓動,因此它沒有隱藏的「git」文件夾檢查。 – Kim 2012-04-27 12:01:57

+0

如果你想使用git來獲得流體,我建議你閱讀[在線專業版Git book](http://progit.org/book/),它很簡短,有整潔的圖表來表示git如何看你的數據,並且易於理解。當我開始時,它幫了我很多。 – KurzedMetal 2012-04-27 12:46:16

1

在與主人相同的位置創建新分支。

簽出主,並硬重置您當前的分支到您想要回滾到提交。

12

首先,由於您已完成所有本地主分支的工作,請創建指向提示或本地主分支的新功能分支。

$ git checkout -b newfeature master 

,然後離開主,因爲它是在服務器(遠程)

$ git checkout master 
$ git reset --hard origin/master 
+0

即時通訊只使用圖形用戶界面(Git Bash給我錯誤)。我做了「創建分支」並選擇了「HEAD」,「[]切換到新分支」未被選中。然後我打開日誌,選擇最新的主條目並選擇「重置」,然後選擇「硬」。看看這些文件,我看到我的更改沒有了,但是當我切換到新的分支並要求查看「差異」時,什麼也沒有顯示出來!他們不應該去那裏? – Kim 2012-04-26 14:17:35

+0

@Kim我不確定你在GUI中做了什麼,無論你在哪裏做這些步驟,這些步驟都可以工作,你必須跳過一步。如果你只使用GUI,我真的很難幫到你,因爲我討厭Tk接口,所以我幾乎沒有'git gui'的經驗。記住分支和標籤只是指向提交的指針,git實際上不會在垃圾收集之前刪除任何內容。如果您在執行此步驟時失去了任何更改,您可以查看'git relog'來恢復以前的提交。 – KurzedMetal 2012-04-27 10:59:45

+0

而不是使用checkout來創建分支,你可以只做一個 'git branch newfeature'然後你只需要做'git reset --hard origin/master' – 2013-12-04 03:49:08