Gitを使用して、私はこのようなものを作りました
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on Origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
頭が離れた状態でもコミットできると言っていたので、そうしました。しかし、今では、分離したヘッドブランチとローカルマスターブランチをマージしてから、変更の束をOrigin/masterにプッシュします。
だから私の質問は、どのようにマスターブランチを実際の状態(ヘッドの分離)とマージすることができますか
現在の場所にブランチを作成し、マスターに切り替えてマージします。
git branch my-temporary-work
git checkout master
git merge my-temporary-work
このようなことができます。
# Create temporary branch for your detached head
git branch tmp
# Go to master
git checkout master
# Merge in commits from previously detached head
git merge tmp
# Delete temproary branch
git branch -d tmp
さらにシンプルになります
git checkout master
git merge HEAD@{1}
しかし、これには、間違えた場合に、切り離されたヘッドで行われたコミットを回復するのが少し難しくなるというわずかな危険があります。
git merge <commit-number>
またはgit cherry-pick <commit> <commit> ...
を実行するだけです
Ryan Stewartが提案したように、現在のHEADからブランチを作成することもできます。
git branch brand-name
または単なるタグ:
git tag tag-name
これは私がやったことです:
基本的に、detached HEAD
は名前のない新しいブランチと考えてください。他のブランチと同様に、このブランチにコミットできます。コミットが完了したら、リモートにプッシュします。
したがって、最初に行う必要があるのは、このdetached HEAD
に名前を付けることです。このdetached HEAD
にいる間は、次のように簡単に実行できます。
git checkout -b some-new-name
これで、他のブランチと同様にリモートにプッシュできます。
私の場合、detached HEAD
(現在はsome-new-branch
)で行ったコミットとともに、このブランチをマスターに早送りしたかったのです。私がしたのは
git checkout master
git pull # To make sure my local copy of master is up to date
git checkout some-new-branch
git merge master // This added current state of master to my changes
もちろん、後でmaster
にマージしました。
それについてです。
デタッチされたHEADの場合、コミットは通常のように機能しますが、名前付きブランチは更新されません。コミットされた変更でマスターブランチを更新するには、現在の場所に一時ブランチを作成し(この方法で一時ブランチは、デタッチされたHEADでコミットされたすべての変更を保持します)、マスターブランチに切り替えて一時ブランチをマージしますマスター。
git branch temp
git checkout master
git merge temp
簡単な修正方法は、そのコミットとチェックアウト用の新しいブランチを作成することです:git checkout -b <branch-name> <commit-hash>
。
この方法で、行ったすべての変更がそのブランチに保存されます。マスターブランチを残りのコミットからクリーンアップする必要がある場合は、必ずgit reset --hard master
を実行してください。
これにより、ブランチを書き直すことになりますので、これらの変更で誰かを邪魔しないようにしてください。 detached HEAD 状態のより良い例については、この記事を必ずご覧ください。
また、処理方法を説明した記事を作成しました。提案されたものとは少し異なるため、追加します。しかし、私はすべての命題が有効だと思います
http://edspencer.net/2009/10/git-what-to-do-if-you-commit-to-no-branch.html
後で最初の答えを良いものとして受け入れます
最善の解決策ではないかもしれませんが(履歴を書き換えます)、git reset --hard <hash of detached head commit>
を実行することもできます。