我開始在我的主分支上工作,認爲我的任務很簡單。過了一段時間,我意識到這需要更多的工作,我想在新的分支中完成所有這些工作。我如何創建一個新的分支並在不污染主人的情況下與我一起進行所有這些更改?創建當前更改的Git分支
回答
如果你還沒有提交任何提交,只有(1:分支)和(3:結帳)就足夠了。
或者,在一個命令:git checkout -b newBranch
正如git reset
man page提到:
$ git branch topic/wip # (1)
$ git reset --hard HEAD~3 # (2) NOTE: use $git reset --soft HEAD~3 (explanation bellow)
$ git checkout topic/wip # (3)
- 你已經取得了一定的提交,但意識到他們是不成熟是在 「
master
」 分支。您想要繼續在主題分支中對其進行打磨,因此請創建「topic/wip
」分支,使其脫離當前的HEAD
。 - 快退
master
分支以擺脫這三個提交。 - 切換到「
topic/wip
」分支並繼續工作。
注:由於git reset --hard
命令(它重置索引和工作樹因爲<commit>
在工作樹的任何更改跟蹤文件被丟棄)的「破壞性」的影響,我寧願去一個:
$ git reset --soft HEAD~3 # (2)
,以確保我沒有失去任何私人文件(沒有添加到索引)。
--soft
選項根本不會觸摸索引文件或工作樹(但將頭重置爲<commit>
,就像所有模式一樣)。
也可能值得注意的是,如果您已將主題材料提交到其他人從其存儲庫中的主分支中,這不是一個好主意。或者至少,如果你確實需要重新設置,你需要告訴人們你正在做的是什麼,所以他們下一次拉的警告不會太過震撼。 – 2010-10-10 09:54:35
我其實還沒做任何提交。所以非常簡單,謝謝隊友 – willcodejavaforfood 2010-10-10 11:05:05
給未來讀者的提示:從下往上閱讀(或者一定要閱讀全文)。 'git reset --hard'會破壞你的改變,如果它們還沒有被提交,它們是不可恢復的!你可能只需要'git checkout -b ...' – 2012-05-30 18:58:40
既然你還沒有做出任何承諾的是,你可以保存所有的更改,以藏匿,創建並切換到一個新的分支,然後在彈出這些更改回你的工作樹:
git stash # save local modifications to new stash
git checkout -b topic/newbranch
git stash pop # apply stash and remove it from the stash list
或VonC指出'git checkout -b newbranch'並跳過存儲 – willcodejavaforfood 2010-10-10 15:46:52
@will:我在想,創建一個新分支會覆蓋您所有未提交的更改,但如果情況並非如此,那麼您可以跳過藏。 – Ether 2010-10-10 15:58:09
我試了一下,它工作正常,git非常周到,並且不會覆蓋任何本地更改 – willcodejavaforfood 2010-10-10 16:35:57
像在這個問題中說:Git: Create a branch from unstagged/uncommited changes on master:藏匿處是沒有必要的。
只需使用:
git checkout -b topic/newbranch
所有提交的工作將沿着新的分支服用。
如果您嘗試推你會收到以下消息
致命的:當前的分支功能/ NEWBRANCH沒有上游分支。爲了 推動當前分支和設置遠程上游,使用
git push --set-upstream origin feature/feature/NEWBRANCH
只要做的建議,以創建遠程分支:
git push --set-upstream origin feature/feature/NEWBRANCH
遵循以下步驟:
創建新分支:
git branch newfeature
結帳新的分支:(這不會重置你的工作。)
git checkout newfeature
現在提交這一新的分支工作:使用上述步驟
git commit -s
將保持你的原始分支清潔,你不必做任何'混帳重置 - 硬'。通常
git branch branch/name
git checkout branch/name
git push origin branch/name
次我忘了添加起始部分,推動並感到困惑,爲什麼我沒有看到新的分支/犯:
'-s'在步驟3中做了什麼? – 2015-12-11 16:54:58
@ScottBiggs這是沒有必要的,但一些人遵循的做法。它是[[--signoff]](https://git-scm.com/docs/git-commit)的縮寫,並將您的用戶名添加到提交給未來查看日誌的用戶,以知道您已經放棄了此提交。 – 2016-02-03 15:46:13
很好的答案,但在步驟3中不需要'-s'。 – 2016-07-18 16:37:56
新的變化添加到一個新的分支,並推送到遠程bitbucket
- 1. 如何從當前文件創建git分支而不更改主控?
- 2. 沒有當前文件更改的Git分支
- 3. 將當前更改放入新的Git分支
- 4. Git從當前簽出的主文件創建分支?
- 5. git中止當前更改後切換分支
- 6. GIT:將本地更改添加到非當前分支
- 7. 在git中創建分支的分支?
- 8. Tortoise GIT - 合併後顯示在分支中創建的更改
- 9. git - 自創建以來對分支的更改?
- 10. 如何更改基於關閉的當前分支的分支?
- 11. Git - 從某個分支創建分支
- 12. Git:更改主分支?
- 13. Git - 無法更改分支
- 14. 在Git中更改分支
- 15. 混帳分支創建git
- 16. 創建一個git分支在對主進行更改之後
- 17. 當前分支上的Git別名
- 18. 如何找出從創建日期分支到當前時間的更改
- 19. Git當前分支提交列表
- 20. 只顯示當前分支Git中
- 21. 我想將我當前的Git分支重置爲主分支
- 22. Git:從主機上未分期/未分配更改創建分支
- 23. 如何推送到遠程的當前git分支,並立即反映更改?
- 24. 更改git commit的「主」分支?
- 25. Git從以前的提交範圍創建分支?
- 26. 創建從現有的Git分支
- 27. 當我創建新目錄時,跟隨我的git分支
- 28. 在當前分支上進行所有更改並將它們移動到Git中的新分支中
- 29. git分支前後地方分支?
- 30. 如何在Git中創建一個指向當前迭代分支的符號分支?
[將現有的,未完成的工作移動到Git中的新分支](http://stackoverflow.com/questions/1394797/move-existing-uncommited-work-to-a-new-branch-in -git) – Marijn 2013-06-19 09:29:54
dup http://stackoverflow.com/questions/2569459/git-create-a-branch-from-unstaged-uncommited-changes-on-master – andrej 2014-01-28 12:51:59
謝謝!我也是! – Jonah 2014-09-05 15:27:55