基本的な質問ですが、これはいつも私に起こります:
working-branch
に変更を加えるmaster
に切り替えgit merge working-branch
git Push
cap deploy
(ステージングへ)それから私は戻って何か他のことを考えて、いくつかの変更を始めます...それでもマスターのままです。
次のいずれかに簡単な方法は何ですか?
working-branch
に移動してmaster
をクリアし、working-branch
で編集を続行できるようにしますnew-working-branch
にスピンし、次にworking-branch
を破棄しますか?このページ の「ブランチ」セクションの後半でリスクを取り、推奨を試みましたが、編集内容がすべて消去されました!?!おそらく、git branch dubious-experiment
とgit checkout master
の後、両方のブランチのgit status
が同一になったためです(マスターでは「クリーン」ではありません)。 git reset --hard <SHA1sum>
は両方のすべての変更を一掃しました!?!
git branch dubious-experiment
M---N-----O----P---Q ("master" and "dubious-experiment")
git checkout master
# Be careful with this next command: make sure "git status" is
# clean, you're definitely on "master" and the
# "dubious-experiment" branch has the commits you were working
# on first...
git reset --hard <SHA1sum of commit N>
あなたの説明から、私はあなたがまだ変更をコミットしていないと思います-それは正しいですか?
はいの場合、ここにあなたの答えがあります:
エディターで設定する必要がありますが、おそらく難しいでしょう。プロンプトとエディターに現在のブランチを表示すると、非常に役立ちます。
new-working-branch
に移動してから破棄する方法working-branch
git checkout -b new-working-branch
git add …
git commit -m "mycommit"
マスターに何もコミットしていないので、マスターで何も変更する必要はありません。必要に応じて、作業支店を破棄できます。
working-branch
に移動する方法git checkout -b temp-branch
git add …
git commit -m "mycommit"
git rebase --onto working-branch master
git checkout working-branch
git reset --hard temp-branch
git branch -d temp-branch
変更がマスターにあるが作業ブランチではない変更と競合しない場合、これははるかに簡単に行うことができます。
git stash
git checkout working-branch
git stash pop
master
への変更をすでにコミットしたが、どこにもプッシュしなかった場合...
最後の変更のために新しいブランチを作成する
git checkout -b newfeat master
working-branch
ブランチの上ですべての変更を再生(コミットを移動)します
git rebase --onto working-branch Origin/master newfeat
master
ブランチに変更し、最後のプッシュの状態にリセットします
git checkout master
git reset --hard Origin/master
この時点であなたは持っています:
master
(Origin/master
)working-branch
は変更されていませんworking-branch
よりも新しい新しいnewfeat
ブランチ。私は通常、次のGit設定をお勧めします。
git config Push.default nothing
これにより、プッシュするときに少なくともブランチに名前を付ける必要があります。ローカルでマスターにコミットすることを止めることはありませんが、自分が持っていることに気付いたら、他の人に影響を与えることなく、それらのコミットをブランチに移動できます。
私は同様の場合に使用しました:
git branch -f <branch-name>
git checkout <branch-name>
または
git checkout -B <branch-name>
。
どちらのバリアントもブランチを移動しますbranch-name
現在のコミットにリセットせずにツリーをリセットします。