web-dev-qa-db-ja.com

「ブランチなし」から実際のブランチにコミットを「移動」するにはどうすればよいですか?

私は間違いを犯し、「最後のタグへ」コミットを開始しました。これにより、コミットは「ブランチなし」になります。それらは、既存のブランチのヘッドに適用されるべきでした。 notが私の変更をプッシュしました。コミットがwrongブランチにある場合について他の質問をいくつか見つけましたが、今ではnoブランチがあるので、これを処理する方法がわかりません。

できれば、間違いを完全に消去し、変更を正しいブランチの最後に「移動」したいと思います。間違いを履歴に残さなければならない場合、少なくともそれらをマージする必要があります。

37
Letharion

現在、デタッチHEAD状態です。これを解決するには、git branch <branchname>またはgit checkout -b <branchname>で新しいブランチを作成するだけです。これにより、ローカルブランチが作成され、プレイできるようになります。また、終了したら削除することもできます。

Gitのブランチはコミットポインターであるため、新しいブランチを作成すると、新しいブランチが現在のコミットをポイントし、マージすることもできます。

あなたの「間違い」は消去する必要はありません、前のコミットの上に新しいコミットを作成するだけです。履歴などは変更しませんでした。

編集:あなたのコメントに応じて、あなたがする必要があるのは:

git branch temp
git checkout master # or any other branch
git merge temp
git branch -d temp
68
drrlvn

git reflogを使用してすべてのコミットを表示できます

したがって、単に別のブランチにアクセスして、必要なコミットに対してgit cherry-pick <commit-hash>を実行できます。

しかし、私はspatzが述べたような分岐方法を好むでしょう。

16
Sailesh

注:あなたも持っています

enter image description here

どちらの場合でも、tmpブランチを実行し、それを実際のブランチにマージすることが解決策です。

7
VonC

Tempブランチの作成を伴わない別のソリューションは、 here で説明されています。一時ブランチではなく、最後のコミットとマージするだけです。

$ git checkout master
$ git merge d2bdb98

コミットの種類がわからない場合は、 git log 。この解決策が「チェリーピッキング」と異なるかどうかはわかりませんが、期待どおりの結果が得られました。

5
Nathan Buesgens

コミットしたいmasterブランチがあるのに、誤ってデタッチされたHEADにコミットした状況がありました(ここで、コミットハッシュは重要ではありませんが、状況):

$ git branch
* (detached from 29d2cfb)
  master

ここに私の簡単な修正がありました:

$ git branch -f master HEAD
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'Origin/master' by 1 commit.
  (use "git Push" to publish your local commits)

ケーキ。

このトリックが機能するのは、masterが最初に誤ったコミットを行ったのと同じコミットを最初に指していた場合のみであることに注意してください。そうでない場合は、リベース(またはチェリーピック、またはマージ...)する必要があります。

1
mpontillo