Git スタッシュを誤って空にしてしまった場合はどうすればよいですか? コードについて言及した後で、元の言葉に戻ることはできますか?

1 はじめに

この記事でまとめた知識は非常に実践的です. git ツールの珍しい操作ですが、絶対に冷たい知識ではありません. 学んだ後は、git を使えるようになることから、g​​it マスターにアップグレードすることができます.
主に 2 つのシナリオに対する解決策があります。空になった後に git stash レコードを復元する方法は? git commit コードの後に​​復元する方法は?

2. git stash でシーンをクリア

私はプロジェクトのパッケージ化とアップグレードを担当しているため、git stash コマンドをよく使用します.プロジェクトのバージョンをアップグレードする必要がある場合もありますが、ローカルでいくつかの変更を加えたため、リモート エンドにアップグレードしたくありません (変更はあまりなく、新しいブランチをプルする必要はありません. このとき, git stash はローカルの変更を一時的に保存します.再起動せずに git unstash 。
ここで問題が発生します. コマンド ラインから直接操作することはありません. アイデア エディタには操作可能なクライアントがあります. スタッシュするたびに, リカバリを容易にするためにエイリアスを付けてスタッシュ レコードの行を残します.ゆっくりと、ここに記録します 多すぎて、軽度の強迫性障害のため、冗長なデータがあまり表示されません。クリアしたら、朝書いたコードが隠されていて、まだ取り戻せていないことに気づきました。
ここに画像の説明を挿入

2. git stash clear 後の復元方法

  1. まず、コンソールに入力します
git fsck --lost-found

ここに画像の説明を挿入

  1. 次に、上記のコマンド dangling commit xxxidxxx で表示されるレコードに従って、次のコマンドを入力して ID の特定の内容を表示します。
git show xxxxidxxxx

ここに画像の説明を挿入
これは、以前に削除された git stash の一時的な情報です, 一時的な保存日、エイリアス (私の場合は 0309)、一時的な保存ファイルのリスト情報を含みます. それが私たちが望むものではない場合, ぶら下がっているすべてのコミットを1つずつ見ることしかできません. 、ここにはまだショートカットが見つかりません。
復元したい送信済みデータが見つかったら、id をコピーし、次のコマンドを入力して復元します。

git merge xxxxidxxxx

実行後、以前のコードが復元されます。ここでの復元は git unstash でコードをローカルに復元するのと同じだと思っていたのですが、それは間違いでした。
復元後の効果はコミットと同等ですが、リモート ウェアハウスにはプッシュされていませんが、一部のローカルの変更は私が面白半分で変更したものであり、プッシュできないため、コミットを復元する必要があります。

3. Git は、リモート ウェアハウスにプッシュ (プッシュ) された情報を取り消します

このシナリオも非常によくあることですが、コードを間違って送信してしまった場合はどうすればよいですか? 次の 3 つの手順が必要です。

  1. 首先,通过git log查看提交信息、ロールバックする必要があるバージョン番号を取得するため (エラー コードがリモート エンドにプッシュされたシナリオに適用可能): ここでロールバックする必要があるバージョン番号は、4d70e000d79cb556528f99908d63e03796bd2c46 です
    ここに画像の説明を挿入
  2. 然后,通过git reset --soft <版本号>重置至指定版本的提交、提出を撤回する目的を達成するため:
$ git reset --soft 4d70e000d79cb556528f99908d63e03796bd2c46

パラメータ soft の意味: 再送信のために現在のワークスペースを保持する//最後の送信が不完全で、前回に基づいて何かを追加したい場合は、パラメータ
hard を選択することもできます。これにより、変更がキャンセルされます。 Use//If you can not want to submit something last time, you can choose this
step. このステップは、コミットメッセージをキャンセルします (リモートウェアハウスにプッシュされていません)
2. 元に戻す
状況についてthat has has been push to the remote Warehouse, you need to pass git push origin master –force Forcefully submit the current version number to receive the Purpose of revoking the version number. パラメータ force を追加して送信を強制する必要があります。この時点で、ローカル プロジェクトのバージョン番号がリモート ウェアハウスのバージョン番号よりも低いため、失敗します。

$ git push origin master
To github.com:hanchao5272/myreflect.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:hanchao5272/myreflect.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

3. ロールバックが成功しました。コードをローカルで変更し、再送信してプッシュできます。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_42887496/article/details/129421784