私のプロジェクトには、サーバー上に裸のレポがセットアップされています。私は現在ブランチに0.9/develop
います。0.9/develop
別の開発者が取り組んでいたブランチとマージしました。彼の変更を完全に消去するよりも、彼のコードを修正する方がはるかに手間がかかることが判明しました。残念ながら、git push origin 0.9/develop
マージをコミットした後に既に実行しており、それらの変更を開発およびステージングサーバーにプルしました(はい、私は愚かです)。
私は SO で幾分似たような質問をたくさんしてきましたが、どれも私の正確なケースをカバーしていないようです。これは特に役に立ちました: Git リポジトリを以前のコミットに戻すには?
その質問からの情報を使用して、プロジェクトの最後のコミットを首尾よく消去することができました。具体的にはgit reset --hard f6c84a0
、他の開発者の n00bery を自分の詩にマージする直前に、ローカル リポジトリをコミットにリセットすることに成功しました。
わかりました。あとは、裸のレポを修正するだけです。だから私は試しgit push --force origin 0.9/develop
ました。残念ながら、サーバーが送り返した特定のメッセージを失いましたが、それは「成功」に沿ったものであり、リモート リポジトリが更新されて f6c84a0 がコミットされたことを示していました。
サーバーに SSH 接続してからステージング環境に移動して を実行しようとすると、次git pull
のような応答がありました。
From /home/ben/web/example
+ 77d54e4...f6c84a0 0.9/develop -> origin/0.9/develop (forced update)
Already up-to-date.
ただし、git log
ステージング サーバーから実行したとき、マージからのすべてのコミットはまだ0.9/develop
ブランチにあります。のようないくつかのことを試しましたgit pull --force
が、悪いコミットをなくすことはできませんでした。
じゃ、いいよ。猫の皮をむく方法はたくさんあります。私はステージング サーバーを完全に消去し、新しいサーバーをgit clone --recursive --no-hardlinks example.git stage.example.com
作成して、いくつかのサーバー メンテナンス作業を行う必要なセットアップ スクリプトを実行しました。
今、私は自分に戻ることができません0.9/develop branch
。以前は単純に を実行git checkout 0.9/develop
していましたが、今それを実行すると、次のようになります。
Branch 0.9/develop set up to track remote branch 0.9/develop from origin.
Switched to a new branch '0.9/develop'
待って…何?0.9/develop
新しいブランチではありません。この質問からの情報を操作する: Git ですべてのリモート ブランチを複製する方法は? 私は agit branch -a
を実行し、次の結果を取得しました。
* 0.9/develop
master
remotes/origin/0.8/develop
remotes/origin/0.8/master
remotes/origin/0.9/develop
remotes/origin/HEAD -> origin/master
remotes/origin/category-address
remotes/origin/jaminimaj
remotes/origin/master
remotes/origin/permissions
remotes/origin/ticket-duration
remotes/origin/timzone-support
その後、試してみgit checkout origin/0.9/develop
ましたが、次のメッセージが表示されました。
Note: checking out 'origin/0.9/develop'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at f6c84a0... bugfix: revert email helper
良いニュースは、ステージング サーバーが適切なコード ベースを持つようになったことですが、私は切り離された HEAD 状態にあります。私はおそらくここで非常に些細なことを見逃していることを認識していますが、それは確かに私の金曜日の夜を台無しにしています. ステージング サーバーの HEAD が の HEAD を指すようにするにはどうすればよい0.9/develop
ですか? また、開発環境でも同じことをしたいのですが、git
サーバー全体を消去して最初からやり直すよりも、適切な方法で実行したいと考えています。私はそれを行うことができますか、それともレポからサーバーを再構築することによってブルートフォースする必要がありますか? みんな助けてくれてありがとう!