私はGitにまったく慣れていません。間違ったコードをコミットした後、それを修正するために、現在のブランチを前のブランチにリセットしました。しかし、どういうわけか、これは私が望んでいたことをしませんでした! 現在、私のマスターには、previous_master という追加のブランチ名があります (これは、ブランチが指す場所です)。間違ってコミットしたコードのブランチ名は original/master! 間違いを正す方法がわかりません。master にも original/master というブランチ名を付けたいです。
2 に答える
マスターにポイントさせたいコミットのshaがわかっている場合は、次のようにします。
$ git checkout master
$ git reset <sha>
実行すると
$ git reflog
これまでに行った履歴が表示されます。左の列の文字列はシャです。この情報は、最初は少し戸惑うかもしれませんが、必要な情報を簡単に見つけられるはずです。実験!
少しの基本
最初に、git 内のすべてがハッシュによって識別されることを思い出してください。履歴でコミットしたものはすべて、このハッシュを介してアクセスできます (git checkout $hash
アプリケーションの状態をそれにgit show $hash
変更するため、そのコミットの変更を表示するためなど...)。
ブランチ名はタグのようなもので、作業ツリーを簡単に編成できますが、それらはすべて単なるハッシュ ポインターです。必要に応じて、 を使用してブランチで「時間をさかのぼる」ことができますgit checkout <hash id>
。
元/*
のように見えるブランチsomething/something
(例: origin/master
) は、リモート ブランチです。したがってorigin/master
、これは「オリジン」リモートのブランチ「マスター」を意味します。
次の方法でローカル ブランチを表示できます。
git branch
およびリモート:
git branch -r
master
次の方法で呼び出されるリモート リポジトリにorigin
送信できます。
git push origin master
プッシュの 2 つのブランチの履歴に競合がある場合、git はプッシュを許可せず、プッシュを許可する前に競合を手動で解決するように求めます。
あなたの場合、どのコミット (どのハッシュ) が目的のアプリケーション状態であるかを見つけて、ブランチをそのコミットにリセットする必要があります。
次の方法で、コミット履歴をターミナルに表示できます。
git log --graph --decorate --pretty=oneline --abbrev-commit --all
これはクレイジーに見えますが、私のお気に入りの git コマンドです。短いエイリアスで使用しています
次の方法で、アプリの状態をそのコミットに切り替えることができます。
git checkout $hash
HEADは現在そのハッシュにあります。
必要な状態を見つけて、マスターをその状態にリセットします。
git checkout master
git reset --hard $hash
これにより、コミットされていない変更がすべて削除されるため、注意してください。
コミットされた履歴はすべて残ります - 現在のブランチと状態を履歴のそのハッシュにリセットするだけです。
その後、レポコールに送信する場合:
git push --force origin master
これにより、マスターの状態がオリジン/マスターに明確に反映されます(オリジンリモートに送信されます)。 そのリモートの履歴を変更する必要があることが確実でない限り、 --force を使用しないでください。また、別の開発者が既にオリジン/マスターからプルされたものを使用している場合は使用しないでください。 の履歴が変更されるためです
origin/master
。それはあなたが望むことをしますが、それについてもっと詳しく読むべきです:男 git プッシュ