操作を間違えることってよくあります
間違えた作業を「元に戻したい」という状況はよく出てきます
今回はそういう「取り消し作業」に焦点を当てます
Forkを開き、フェッチ&チェックアウトをして、mainブランチを最新にしてください。
mainをダブルクリック(または、右クリック)でチェックアウトできます
作業ディレクトリを開き、新しいファイルを追加してください。
コミットはしないようにお願いします。
Local Changes に (1) がついていれば下準備OKです。
この状態で、別のブランチをチェックアウトしようとしてください。
すると、以下のようなダイアログが表示されます。
Don’t change を選んでチェックアウトすると、
作業ディレクトリに追加したファイルは維持されたまま、他のブランチがチェックアウトできます。
(ただし、これはいつも必ず成功するとは限りません。)
チェックアウトするブランチと、編集内容が競合した場合、以下のエラーが表示されます。
Local Changesがない状態でチェックアウトするようにしましょう!
Discardを選ぶとどうなるのでしょうか?
Local Changesにある変更をすべて削除してからチェックアウトすることになります。
取り返しのつかない ことになる可能性があるので、何が起こるか理解した上で使いましょう! (効果をわかって使うのはOKです)
Discardというのは、破棄するという意味の英単語です。
手札(card)を離す(dis)が語源です。
Stash(隠す)は、作業ディレクトリにある「ファイル変更」を別の場所に退避し、Local Changesがない状態にする機能です。
Apply(適用する)は、別の場所に退避したファイル変更を、作業ディレクトリに反映して、Local Changesがある状態にする機能です。
作業ディレクトリにファイルを追加して、 Local Changes がある状態にしてください。
Unstaged にファイルがあればOKです。
Unstaged のファイルを 右クリック > Discard changes をクリックすると、ファイル変更を削除できます。
つまり、ファイルを変更する前の状態に戻せます。
「とあるアイデアを試してみたけど、やっぱりやめた」という場面などで、 Local Changes がない状態へしたいときに便利です!
ただしこれは、取り返しがつかない作業 なので、何が起こるか理解した上で使うようにしましょう! (Forkの場合、 Unstaged のファイルを選択した状態で、キーボードのDeleteキーを押すと、Discard changesが実行できます)
プル = フェッチ + チェックアウト
プルは、フェッチとチェックアウトを連続して実施します。
Local Changesがある状態でプルを実行すると、チェックアウトと同じエラーが発生します。
リモートリポジトリの情報を取得したいだけなら、フェッチの方が安全 です。
コミットを削除したいときに使えるのが、リセットです!
Forkには、3種類のリセットがあります!
非常によく使う機能ですが、選択を間違えると、取り返しのつかないことになります ので、十分に理解してから使いましょう!
作業ディレクトリの状態は維持しつつ、コミットだけ削除したいときに使います。
Mixed は、コミットされてたファイル変更が Unstaged に移動します。
Soft は、コミットされてたファイル変更が Staged に移動します。
(あまり違いはないので、とくにこだわりがなければ、デフォルトの Mixed を使えば良いです。)
コミットを削除して、作業ディレクトリを以前の状態へ戻したいときに使います。
非常に危険で取り返しがつかない操作なので、機能を十分に理解してから使いましょう!
コミットメッセージをタイプミスしてしまうこともよくあります。
今回はあえてタイプミスをしてコミットしたものをプッシュします。
修正したいコミットを右クリックして、 Interactive Rebase > Reword をクリックします。
コミットメッセージを修正して、OK > Rebase で修正できます。
これでコミットメッセージを修正できました!
しかし、ローカルリポジトリのブランチしか修正されていません。
こういうときは、強制プッシュをします。
プッシュする際に、 Force push にチェックを入れてから、プッシュしてください。
変更後のコミットで上書きされました。
強制プッシュを利用すると、ローカルブランチの内容で、リモートブランチの内容を強制的に上書きします。
使い方を間違えると、取り返しのつかないことになりますので、何が起こるか理解した上で使いましょう!