將更改的文件移到另外一個分支進行簽入

這常常發生在我身上:我寫了一些代碼,檢查個人更改,而後意識到我不在適當的分支中來檢查那些更改。 可是,若是不還原更改,我將沒法切換到另外一個分支。 有沒有辦法將更改移動到另外一個要在其中檢查的分支? git


#1樓

若是要將更改移動到新分支 ,只需兩個命令便可完成: spa

git stash
git stash branch new-branch

根據git stash文檔.net

分支<branchname> [<stash>]分支<branchname> [<stash>] 指針

從最初建立<stash>的提交開始建立並籤<branchname><branchname>的新分支,並將記錄的更改應用於新的工做樹和索引。 code


#2樓

不幸的是,這也常常發生在我身上,若是我在git commit以前意識到本身的錯誤,就使用git stash ,不然使用git cherry-pick不然在其餘答案中都很好地解釋了這兩個命令 索引

我想爲git checkout targetBranch添加一個說明: 若是targetBranch與當前分支具備相同的歷史記錄,則此命令僅保留您的工做目錄和暫存快照 文檔

若是還沒有提交更改,只需使用git checkout移至新分支 ,而後按常規提交便可 get

@Amber的語句不是假的,當您移至newBranchgit checkout -b newBranch ,將建立一個新指針,該指針指向與當前分支徹底相同的提交。
實際上,若是您碰巧有另外一個分支與當前分支共享歷史記錄(兩個點都在同一提交中),則能夠經過git checkout targetBranch 「移動更改」 it

可是,一般不一樣的分支意味着不一樣的歷史記錄,而且Git不容許您在具備骯髒工做目錄或暫存區的這些分支之間進行切換。 在這種狀況下,您能夠執行git checkout -f targetBranch (清除並丟棄更改)或git stage + git checkout targetBranch (清除並保存更改),僅運行git checkout targetBranch會產生錯誤: io

錯誤:檢出將覆蓋對如下文件的本地更改:...在切換分支以前,請先提交更改或將其存儲起來。 墮胎


#3樓

一個軟的git reset會將提交的更改放回到索引中。 接下來,簽出您打算提交的分支。 而後使用新的提交消息進行git commit

  1. git reset --soft <commit>

  2. git checkout <branch>

  3. git commit -m "Commit message goes here"

git docs

git reset [<mode>] [<commit>]此表單將當前分支頭重置爲,並可能根據來更新索引(將其重置爲的樹)和工做樹。 若是省略,則默認爲--mixed。 必須爲如下之一:

--soft徹底不觸摸索引文件或工做樹(但將頭重置爲,就像全部模式同樣)。 就像git status那樣,這會將全部更改的文件保留爲「要提交的更改」。


#4樓

若是還沒有提交更改 ,只需使用git checkout移至新分支,而後按常規提交便可-對文件的更改在提交以前不會綁定到特定分支。

若是您已經提交改變:

  1. 鍵入git log並記住要移動的提交的SHA。
  2. 簽出您要將提交移至的分支。
  3. 輸入git cherry-pick SHA並從上方替換SHA。
  4. 切換回原始分支。
  5. 在錯誤分支提交以前,使用git reset HEAD~1重置。

cherry-pick接受給定的提交併將其應用於當前已檢出的頭部,從而使您能夠將提交複製到新分支。


#5樓

git stash是您的朋友。

若是還沒有提交,請運行git stash 。 這樣能夠節省您的全部更改。

切換到要更改的分支,而後運行git stash pop

git stash有不少用途。 這固然是更有用的緣由之一。

一個例子:

# work on some code
git stash
git checkout correct-branch
git stash pop
相關文章
相關標籤/搜索