2016-10-20 26 views
1

ブランチv4.1.0-rc12の前回のコミットをチェックアウトすると奇妙な状況に陥りました。いくつかのファイルを修正して、v4.1.0-rc12ブランチにコミットしたいと思っています。ジッタ付きヘッドモードのファイルをブランチにコミットする方法

以前のコミットをチェックアウトしてからHEADポインタが切り離された状態になったので、この変更を切り離しモードでv4.1.0-rc12ブランチにコミットするにはどうすればよいですか?

私はコミットハッシュの「チェックアウト」の代わりに「元に戻す」をしたかったと思います。

編集したファイルをコミットしてv4.1.0-rc12ブランチに追加する方法はありますか?

これは私の "GitのREFLOGは、" 私はV4.1.0-RC12

に任意のヘルプや概念を441bfac保存したい

441bfac [email protected]{0}: commit: Resolved #110 
dc00e4f [email protected]{1}: checkout: moving from v4.1.0-rc12 to dc00e4f 
2542748 [email protected]{2}: commit: Login & SignUp revamp (Broken) 
dc00e4f [email protected]{3}: commit: Resolved #109 and #110 
4472914 [email protected]{4}: commit: Resolved #108 

を示したものですいただければ幸いです。

答えて

2

方法1:

$ git checkout v4.1.0-rc12 branch 
(see if it succeeds, if so): 
$ git add ...  # if/as needed 
$ git commit 

この動作しない場合があります、(および場合のみ)場合git checkoutステップは、ブランチに切り替えることを拒否しますので、スイッチングがすでにた変更を一掃すると発表しました製。

ステップが成功するとなります。できるだけ変更を行います。

git checkoutの手順が成功した場合は、これをすべて処理するのが一番簡単な方法です。そうでない場合は、別の方法に進みます。


方法2(avi's answer):

$ git checkout -b tempbranch 
$ git add ...  # as and if needed 
$ git commit 

これ(-b tempbranch)は以前の頭を外した時にコミットを指す新しい、一時的なブランチを作成します。

削除されるまで今、あなたは git checkoutあなたが tempbranchに作られたものは何でもあなたが好き、とコミットすることは永久にあなたのリポジトリ(まあ、永久/しない限りに保存されていることができ
  o--o--o <-- v4.1.0-rc12 branch 
     /
...--o--o 
     \ 
      o   <-- tempbranch 

git commitは新しい、この一時的なブランチ上のコミットを作成します名前tempbranch)を使用すると、いつでも必要なときにその内容をコピーできます。


方法3:

$ git stash 
$ git checkout v4.1.0-rc12 branch 
$ git stash apply # or even "git stash pop" but I prefer "apply" 
... check everything out ... 
... if it all looks right ... 
$ git stash drop  # "git stash pop" means "apply and then auto-drop" 

git stash上の任意の支店ではありません(まあ、実際にはコミット)をコミットしますです。一時的なブランチを作成したときと同じ効果があります。そのため、非ブランチを削除してしまうと問題が残るため、git stash dropはコミットを保持している名前のないブランチを削除します。基本的に

git stash applyステップ(それはこれよりも複雑ですが)チェリーピックgit stashがなされていることにコミット、あなたが今どこにいても:これはチェリーピッキングのようにあなたがtempbranchに作られたコミットです。 git stash pop自動的git stash applyの結果が混乱している場合でも、git stash dropを呼び出し

注意、あなたは一時的なコミットの場合は、あなたpopではなく、もしあなたapplyを失ってしまいました。すべてがの場合、には実際の違いはなく、popがより便利です。物事が悪化した場合に備えて、これはより良いbread-crumb trailを残す場合に過ぎません。


(私の個人的な好みは、方法2に方法3、偶然に、そして、その後、最初に可能であれば、方法1のために3通常2ですが、私は - 私の仕事になるだろうと確信しているとき、時々、好みます。)

+0

偉大な答え。ありがとう!! –

2

まず、以前のコミットから新規ブランチを作成し、新しく作成したブランチにチェックアウトし、ファイルを更新して変更をコミットします。 その後、変更を任意のブランチにマージできます。

+0

私が作成してチェックアウトした場合、新しいブランチでは現在の作業が分離モードで緩んでいませんか? –

+0

@SamuelRobert:いいえ、gitはチェックアウトが非破壊であることを保証します。それはコミットされていない変更を保つか、競合のためにできないならチェックアウトを拒否します。説明については、[git checkout < branch >ローカル変更の失敗](http://stackoverflow.com/questions/37450983/git-checkout-branch-failure-for-local-changes)を参照してください。 – sleske

+1

はい、現在の変更が分離されたブランチから解放されます。まず、変更された変更をデタッチヘッドにコミットし、新しいブランチをデタッチヘッドから作成します。 – avi

関連する問題