どちらもOriginマスターにプッシュされた最後の2つのコミットを取り消す必要があります。 Tortoise gitでは、履歴を表示し、最後のコミットから3番目をクリックして、「マスターをこれにリセット」を選択しました。これは、このバージョンに戻すことを意味していると推測しています。
ただし、このオプションを選択する場合は、次の3つのオプションのいずれかを選択する必要があります。
残念ながら、これら3つのオプションのどれを選択すればよいかわかりません。最後の2つのコミットを元に戻し、時間を遡りたいだけです。
次の質問は、この操作がリモートのOrigin、あなたのリポジトリ、またはあなたの作業ディレクトリ、あるいはこれら3つの組み合わせで行われるのでしょうか?例えば。コミットとプッシュは元に戻した後に行う必要がありますか、それともあなたのためにこれを行いますか?
HARDが私たちが望むものであると推測します-それはリポジトリ(どちらかわからない)とローカルソースコードを以前のバージョンに戻します。この場合、なぜこれがデフォルトではなく、他の2つのオプションの使用例は何ですか?元に戻すかどうか、リモートリポジトリのみを元に戻し、ローカルの作業ファイルを元に戻さない場合は、乱雑な状態になります。
ローカルで変更されたファイルはありません。
注:gitを壊さないソリューションが必要です(過去にgitを壊してしまい、新しいリポジトリを作成する必要がありました)。おそらく、以前のバージョンをチェックアウトしてから最新バージョンの上にチェックインするなど、別の方法が考えられますが、その方法はわかりません。
次のようなことができることがわかります。
git checkout [revision]
しかし、このバージョンを新しいヘッドにする、またはヘッドをこれに置き換えることをgitにどのように伝えますか?マスターヘッドから離れているため、コミットするものは何もないので、コミットするだけではいけないと思います。余談ですが、あなたが前をチェックアウトした場合。バージョン、変更、コミット、何をどこにコミットしますか?
私は https://www.atlassian.com/git/tutorials/undoing-changes を読みましたが、ローカルリポジトリとリモートリポジトリの関係については触れていません。元に戻すコミットがすべてリモートOriginマスターにプッシュされた場合、リモートOrigin、ローカルリポジトリ、および作業ディレクトリを元に戻すためのレシピは不明です。3つすべてを3コミット前のコミットに戻す必要があります。これがリセットまたはリバートで行われるかどうかは気にしません-3つの場所すべてで機能する方法が必要です。
正しいレシピは次のようなものである可能性があります。
git status (we are on master with a clean working dir)
git git revert HEAD~2
git commit -m "revert"
git Push Origin mater
しかし、この例の一連のステップを見たことはありません。可能であれば、亀gitで実行することをお勧めします。
2つのオプションがあります。
revert
reset --hard
およびPush --force
。よくわからない場合は、revert
を使用してください。これが最も安全なオプションです。
本当に、本当に、コミットを削除して、変更された履歴を気にしない場合は、reset --hard
およびPush --force
。これには次のような影響があります。
次の質問は、この操作がリモートのOrigin、あなたのリポジトリ、またはあなたの作業ディレクトリ、あるいはこれら3つの組み合わせで行われるのでしょうか?例えば。コミットとプッシュは元に戻した後に行う必要がありますか、それともあなたのためにこれを行いますか?
一般に、TortioseGitのすべての変更はクローン(「作業コピー」)にあります。また、プッシュは常に手動アクションです
HARDが私たちが望むものであると推測します-それはリポジトリ(どちらかわからない)とローカルソースコードを以前のバージョンに戻します。この場合、なぜこれがデフォルトではなく、他の2つのオプションの使用例は何ですか?
hard
はコミットなどの履歴を削除するため、危険な操作です。他人の変更も削除できました!
他の2つのオプションの使用例は何ですか?
git reset --mixed、-soft、および--hardの違いは何ですか? を参照してください。
元に戻すとリセットが混乱していると思います。 変更を元に戻す を参照してください。
元に戻す
Git revertコマンドは、コミットされたスナップショットを元に戻します。ただし、プロジェクト履歴からコミットを削除する代わりに、コミットによって導入された変更を元に戻す方法を見つけ出し、結果のコンテンツに新しいコミットを追加します。これにより、Gitが履歴を失うことがなくなります。これは、変更履歴の整合性と信頼性の高いコラボレーションのために重要です。
リセット
Git revertが変更を元に戻す「安全な」方法である場合、git resetを危険な方法と考えることができます。 git resetを使用して元に戻すと(コミットは参照または参照ログによって参照されなくなります)、元のコピーを取得する方法はありません。これは永続的な取り消しです。このツールは作業を失う可能性がある唯一のGitコマンドの1つであるため、このツールを使用するときは注意が必要です。
おそらくあなたのケースではrevertを使う方が良いでしょう:
この場合、特定のコミットを元に戻す新しいコミットを作成するだけで、履歴は変更されません。ローカルで実行してから、リモートにプッシュできます。
それでもリセットを行いたいがローカルでの変更を維持する必要がない場合は、ハードリセットを行います。
そして、あなたはプッシュを強制するべきです:
git Push -f
このソリューションは私の時間を節約しました
1)git reset --hard 93827927ed6e245be27f94c93c7e3574e85b91c6(これはコミットIDです)
2)git reset HEAD〜1
3)git stash
4)git add。
5)git commit -m "ここに新しいコミットメッセージ"
6)git Push --force