プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

レスキューへのGitリセット

自分で、またはチームの一員としてプロジェクトに取り組んでいる場合、コミットを元に戻したい場合があります。 git reset コマンドは、実際の命の恩人として知られているツールの1つです。

Gitの追跡メカニズム

git resetに進む前に 、gitの基本構造について理解する必要があります。 Gitは、ノードとポインターを備えたツリーのような構造を介して、ファイルを管理および追跡します。

ローカルのgitリポジトリには基本的にこれらの「ツリー」が3つあります:

  1. 作業ディレクトリ :または作業ツリー。ローカルディレクトリと git statusを参照します。 作業ディレクトリの状態が表示されます。
  2. ヘッド :現在のブランチの最後のコミットスナップショットです。 git checkoutでブランチを切り替える場合 その後、HEADはブランチの最後のコミットに変更されます。
  3. インデックス :またはステージング 範囲。したがって、 git addを実行すると コミットするファイルは、このインデックスに追加されます。

Gitワークフロー

次の例は、ファイルに変更を加えてから、 git add を使用してインデックスに追加(ステージング)する方法を示しています。 次に、 git statusを確認します コミットする変更を確認します。

レスキューへのGitリセット

git commitを実行すると より永続的なスナップショットとして保存され、マスターとHEADをそのポインターに更新します。したがって、 git status を実行すると、 git commitの後 、3つのツリーすべてが同じ状態になっていることがわかります(コミットするものはありません)。

レスキューへのGitリセット

では、の目的は何ですか gitリセット

git reset を取得するためだけに、このすべてのプリアンブルがなぜあるのか疑問に思われるかもしれません。 。さてgitreset これらの木をさまざまな方法で操作します。そのため、git resetは、実行したい内容に応じてさまざまなオプションを受け入れます。

Gitリセットモード

いくつかの変更とファイルをコミットしたとしましょう。次に、それらを間違ったブランチにコミットしたか、コミットにバグがあるため、巻き戻したいと思います。ここで、gitresetモードについて知っています。 便利です。

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

モードですべてのgitリセットすると、HEADポインターが更新されます。構文は次のとおりです

git reset

主なモードは次のとおりです。

  • -ソフト :HEADポインタをリセットし、インデックスと作業ディレクトリはそのままにします。そのため、HEADはリセットされ、他のツリーには最新の変更が引き続き表示されます。
  • -混合デフォルト オプション。 HEADとインデックスをリセットします。これは基本的にすべての変更のステージングを解除し、 git addを実行する前に残します 。 注: オプションなしでgitresetを単独で実行すると、 git reset --mixedとして解釈されます。 。
  • -ハードこれには注意してください 。 HEAD、indexをリセットするだけでなく、作業ディレクトリもリセットします。したがって、書かれたコードを失う可能性があります!これは、現在のHEADポインター(最後のコミット)が破棄された後の変更と同じです。

-mergeなどの他のモード および--keep 公式ドキュメントで読むことができます。

便利 gitリセット 秘訣

コミットの巻き戻し

モードを省略すると(オプションなしでgit reset)、–mixedとして解釈されることに注意してください。

ここで、 git reset HEADと入力するだけです。 何も起こりませんが、 git reset HEAD〜1を実行すると 次に、HEADが前のコミットを指すようになります。

次の例は、前の例から継続しています。サンプルファイルに新しいテキストを追加するとします。次に、gitaddとcommitを実行します。次に、git reset HEAD〜1を実行した後、すべての変更はステージングされておらず、前のコミットで行われます。

レスキューへのGitリセット

これは、コミットを元に戻したいときに便利で高速な方法です!

特定のファイルのステージングを解除する

gitaddを使用してファイルをインデックスに追加したとします。次の手順を実行するだけで、そのファイルを削除できます。

git reset HEAD

シナリオ:すべてのコードを台無しにしました!動作していたときに戻ることはできますか?

すべてのローカル変更を破棄して以前のコミットに戻りたい場合、最後の手段は git reset --hardです。 。

多くの場合、コードを壊した場合、これが唯一の選択肢になる可能性があります。コミットハッシュがわかっている場合は、 do git reset --hard を実行できます。 。ただし、これは特定のコミット(存在する場合)の後の他のコミットにも影響することに注意してください!

シナリオ:このコミットは新しいブランチにあるはずでした!

これは、特に本番環境で作業を開始するときによく発生します。これがあなたに起こったとしても、慌てる必要はありません!

基本的に、巻き戻す必要のあるブランチの状態を持つ新しいブランチを作成する必要があります。次に、影響を受けたブランチをリセットし、新しいブランチにチェックアウトして、そこでコミットを実行します。

git branch new-branch

git reset HEAD〜1 --hard

git checkout new-branch

命の恩人 正しい!

最後の一言

git reset --hardを実行するときは注意してください また、特定のコミットに巻き戻すとき、特に本番コードで、他の開発者と作業しているとき。多くの場合、gitrevertはこれらの変更を行うための安全な方法です。しかし、それはまた別の会話です。それまで! 👋🏼


  1. Linuxでrootパスワードをリセットする方法

    Linuxでは、通常のユーザーとスーパーユーザーはパスワード認証を介してサービスにアクセスできます。通常のユーザーが自分のパスワードを思い出せない場合、スーパーユーザーは端末から直接通常のユーザーのパスワードをリセットできます。ただし、スーパーユーザー(またはrootユーザー)がパスワードを紛失した場合はどうなりますか?ログイン画面を起動する前に、紛失したパスワードを回復する必要があります。これにより、Linuxホストに物理的にアクセスできる悪意のあるユーザーが完全な所有権を取得できるようになります。この記事では、2つの異なる方法を使用してLinuxで紛失したrootパスワードを回復する方法に

  2. Gitの初心者向けガイド

    Linuxユーザーの場合、おそらく新しいプログラムをダウンロードしようとしたり、CVSやSubversionなどのバージョン管理システムを調べたりしているときにGitに出くわしたことがあるでしょう。 Gitは、既存のソリューションに満足できないため、Linuxカーネルの有名なLinusTorvaldsによって作成されたリビジョン管理システムです。設計の主な重点は、速度、より具体的には効率にありました。 Gitは、以前のシステムの多くの欠点に対処し、すべてをはるかに短い時間で実行します。 Gitの学習を検討している場合は、この初心者向けガイドが開始に役立ちます。 Gitの機能 顧客向けのWeb