0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[GitHub]最新のPullを消してトンズラする方法

Posted at

経緯

研究室の様式(自分の場合はTeXの環境と使用例)をcloneして使っていたところ,間違ってその様式に自分の変更をpullしてしまい,様式を上書きしてしまいました...

内心)自分は何をしているんだ.

解決方法

もっとスマートなやりかた(ローカルデータはそのままでリモートのデータだけ戻す)がありそうですが,ローカルとリモートの両方のデータを元に戻す方法を書きます.

  1. まずは,自分が変更したファイルをバックアップしておきます
bash
git reset --hard HEAD^

[解説]
ローカルのデータ(コミットとステージ)を強制的に(--hard)戻す(reset)方法です.
※(--soft等は,補足欄で解説)

この状態では,まだリモートのデータは反映されておらず,自分が誤ってpullしたデータが残ったままです.

  1. 最新状態でpullをする
bash
git push -f origin master

[解説]
VSCodeの拡張機能「GitGraph」でも"git status"コマンドでもいいのですが,現在のmaster(最新状態)がどこにいるのかが分かるかと思います.
その状態で強制的にpullをすることで,リモートのデータを前の状態に戻す(一個前の状態で"上書"する)ことができます.

どうなるのか
最終的に,ローカルは一個前(コミットする前)に戻ります.
リモートのデータも,同じく,pullする前に戻ります.
気になる変更履歴(時間も)ですが,自分が間違ってpullする前に完全に戻ります.
つまり,変更した時間の履歴も元にもどるので,誰かが上書して元に戻したという痕跡さえ消すことができます.
これでトンズラ完了ですね.

補足

1. resetのオプション

--soft
コミット履歴: 指定したコミットに戻します。
ステージングエリア: そのまま残ります。
作業ディレクトリ: そのまま残ります。
特徴: コミットを取り消したいけれど、変更内容を保持して別のコミットを作成したい場合に使用します。

--mixed (デフォルト)
コミット履歴: 指定したコミットに戻します。
ステージングエリア: リセットされます(ステージングから外れる)。
作業ディレクトリ: そのまま残ります。
特徴: ステージングエリアをクリアして、変更を作業ディレクトリに戻したい場合に使用します。

--hard
コミット履歴: 指定したコミットに戻します。
ステージングエリア: リセットされます(クリアされる)。
作業ディレクトリ: 完全にリセットされます(変更が失われます)。
特徴: 作業ディレクトリを含めて完全に元に戻したい場合に使用します。

2. masterとorigin

項目 説明
origin リモートリポジトリの名称
origin/master リモートリポジトリ「origin」のブランチ「master」を追跡するブランチ
master ブランチの名称

3. headとは

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?