私は新しい機能についていくつかの作業を始めました、そして少しコーディングした後、私はこの機能はそれ自身のブランチにあるべきだと決めました。
既存のコミットされていない変更を新しいブランチに移動して現在のブランチをリセットする方法を教えてください。
新しい機能に関する既存の作業を維持しながら、現在のブランチをリセットしたいです。
以下を使用してください。
git checkout -b <new-branch>
これはあなたの現在のブランチをそのままにして、新しいブランチを作成してチェックアウトし、あなたのすべての変更を保存します。あなたはそれからコミットすることができます:
git add <files>
そして、あなたの新しいブランチにコミットします。
git commit -m "<Brief description of this commit>"
作業ディレクトリー内の変更および索引にステージングされた変更は、まだどのブランチにも属していません。これらの変更が終わるところでこれは変わります。
あなたは reset あなたの元のブランチをしません、それはそのままです。 <old-branch>
に対する最後のコミットはまだ同じです。したがってあなたはcheckout -b
してからコミットします。
あるいは
現在の変更を一時隠し場所に保存します。
$ git stash
この隠し場所に基づいて新しいブランチを作成し、新しいブランチに切り替えます。
$ git stash branch <new-branch> stash@{0}
ヒント:隠し場所の名前の入力を減らすには、Tabキーを使用します。
コーディングしている間にメインブランチでコミットしていた場合は だが、ここでそれらのコミットを別のブランチに移動したいと思う。
現在の履歴を新しいブランチにコピーし、コミットされていない変更もすべて含めます。
git checkout -b <new-feature-branch>
元の "めちゃくちゃな"ブランチを強制的にロールバックします。(切り替えずに)
git branch -f <previous-branch> <earlier-commit-id>
例えば:
git branch -f master Origin/master
または、4回コミットした場合
git branch -f master HEAD~4
警告:git branch -f master Origin/master
はそのブランチに対して追跡情報をリセットするでしょう。したがって、master
ブランチをOrigin/master
以外の場所にプッシュするように設定した場合、その設定は失われます。
このリセット手法を使うこともできます 。しかし、それらの指示はあなたが持っているコミットされていない変更を破棄します。それらを保持したい場合は、最初にそれらを隠し、最後にそれらを隠します。
コミットする場合は、単一のコミットIDを選ぶこともできます。私はmasterで作業を始めるときによくこれを行います。そしてOrigin /にプッシュする前にローカルブランチを作成したいと思います。
git cherry-pick <commitID>
ここ で説明されているように、チェリーピックでできることはたくさんありますが、これはあなたにとってのユースケースかもしれません。
一般的なシナリオは次のとおりです。新しい機能用に新しいブランチを作成するのを忘れて、すべての作業を古い機能ブランチで行っていました。私はすべての「古い」作業をマスターブランチにコミットしました。そして、新しいブランチを「マスター」から拡張したいと思います。私は自分の新しい仕事を一度もコミットしていません。これがブランチの構造です。 "master" - > "Old_feature"
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
@ Robin を使用して、自分がしたことをすべてリストし、
git status <-- review/list uncommitted changes
git stash <-- stash uncommitted changes
git stash branch <new-branch> stash@{1} <-- create a branch from stash
git add . <-- add local changes
git status <-- review the status; ready to commit
git commit -m "local changes ..." <-- commit the changes
git branch --list <-- see list of branches incl the one created above
git status <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch> <-- switch back
!リポジトリに複数のスタッシュがある場合は、新しいブランチに適用するスタッシュを確認します。
git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ...
個々のスタッシュを検査します
git stash show stash@{1}
または、すべてのスタッシュを一度に検査します。
git stash list -p