1. コードの取り消し
現在、誰もがそれを使用していますgit
. プロジェクト開発では、提出されたコードに問題が常に発生します. ロールバック操作を元に戻したい場合は、元に戻すロールバック コードについては別途紹介します。
通常の送信コードをリモート ウェアハウスに送信する場合は、次の 3 段階のコマンドがあります。
git add . ------------> git commit -m 说明 -------------> git push
(添加到暂存区) (提交到本地仓库) (推送到远程仓库)
ではgit
、コードを無効にするコマンドは主に ですが、 、、 の3 つのモードがgit reset
あります。これら 3 つのコマンドは主にウェアハウスの送信後にコードをロールバックするためのもので、基本的にはすべてコミット ログのバージョン番号でロールバックされます。3 つのモードが表す異なる意味は次のとおりです。git reset --soft
git reset --hard
git reset --mixed
-
--soft
: このコマンドは、コードがcommit
一時記憶領域に取り消された後、コードがローカルで変更されないことを示します。 -
--mixed
: このコマンドは、コードがcommit
一時記憶領域に取り消されるまで、コードがローカルで変更されないことを示します。 -
--hard
: このコマンドはコードを特定のバージョンにロールバックすることを意味し、コードはローカルで指定されたバージョンに変更されますので注意してください。
これから言いたいことは、簡単に言うと下図のとおりです。
もう一度強調します。--hard
コマンドは、コードを直接ロールバックして消えてしまいますので、使用するときは注意してください。新しく書かれたローカルのものもクリアされます。
2. さまざまなモードで元に戻す
以下に、上記の提出手順と失効モードを中心に失効後の現象を説明します。元に戻すについて説明する前に、2 つのコマンド、 について理解しましょうgit status
。 まず、このコマンドを通じて、現在のコードがどのブランチにあるか、ワークスペース内のコードの状況を確認できます。 上の図に示すように、コード ワークスペースに入ると、現在のコードがブランチの下にあり、現在のワークスペースには一時記憶領域に送信されていないファイルが 1 つあることがわかります。このコマンドはコード提出の記録を表示するもので、提出情報とバージョン番号 (SHA コード) を確認できます。以下の図に示すように: もちろん、この記事で説明したコマンドの実行場所は、プロジェクト ワークスペースで実行する必要があります。通常はプロジェクトのルート パスの下です。コードのアンドゥについては、主に、 、、 のタイプのアンドゥを考えています。詳細は次のとおりです。git log
git status
git status
v1.0
5.txt
git log
git
提交暂存区的撤销(add撤销)
提交本地仓库撤销(commit撤销)
推送远程仓库撤销(git push之后的撤销)
2.1 追加キャンセル
コードをgit add .
一時保存領域に登録した場合、一時保存領域から退会したい場合は主に以下の方法があります。
2.1.1git reset
失効
一時記憶領域に送信されたコードを直接取り消したい場合は、git reset
コマンドを入力するのが最も便利な方法です。このコマンドまたは入力はgit reset HEAD
同じ効果があります。git add .
このステップでは、次の図に示すように、コードを実行前の状態に戻します。
2.1.2git restore
失効
もちろん、別のgit
推奨コマンドもありますが、git reset
利便性が低く感じられます。つまり、上の図の緑色のテキストの上の行にあるgit restore --staged
コマンドです。
git restore --staged .
または:
git restore --staged 文件名
2.1.3git reset --mixed
失効
冒頭で、取り消しの 3 つのモードについて説明しましたが、その中で、--mixed
一時ストレージ領域に送信されたばかりのコードを取り消したい場合は、次の操作を行うこともできます。
git reset --mixed
ただし、これら 3 つのモード--soft
、--mixed
、は主に、コミットされたコードのバージョン番号--hard
に基づいてコードをロールバックするために使用されますが、ここでは少しやりすぎです。また、バージョン番号を書き込まなくても完了できるのは元に戻す操作のみであり、他の 2 つはバージョン番号を書き込まなければ効果がありません (HEAD^ を除く)。質問します:ロールバックする前にコードを使用できますか? 使用量をロールバックできますか? また、ロールバックはどうなりますか?--mixed
--soft
git add .
--hard
2.2 コミットの取り消し
コードがgit commit -m 备注说明
ローカル ウェアハウスに送信された後、コードをロールバックする場合は、コードをさまざまな状態でロールバックする方法がいくつかあります。主な使い方--soft
、--mixed
モード。後からバージョン番号を付加する方法については、--soft
以下のモードでのみ導入されています。
2.2.1 一時保管場所への撤収
--soft
コードが一時ストレージ領域に取り消された後のみ、コードがローカル ウェアハウスに追加されていない場合は、そのモード のみを使用できます。このモードを使用するにはバージョン番号を付加する必要がありますが、主に以下のような書き方があります。
2.2.1.1git reset --soft HEAD^
書き込み
HEAD^
以前のバージョン番号への取り消しを示します。1 つは^
前回を意味し、1^^
つは前回を意味します。windows
また、システム上、通常の入力を行わなくてもgit reset --soft HEAD^
、コードはgit add .
次の状態(一時記憶領域の状態)に取り消される可能性があることに注意してください。ただし、windows
システムに入力する必要がありますgit reset --soft HEAD^^
。
これは、windows
システムの cmd コンソールのデフォルトの改行が^
そうではないためです。\
入力が少ない場合、より多くのプロンプトが表示されます。これは、次の行を入力する必要があるかどうかを尋ねることを意味し、^
この記号は改行文字とみなされ、git コマンドによって無視されます。
したがって、windows
以下をcommit
4回入力する必要があります^
。
解释:当每次commit之后,都会有提交的记录版本号(通过输入git log命令查看),通过HEAD^只能撤销一次,
拼接多个就会撤销多个。
2.2.1.2git reset --soft HEAD~
書き込み
git reset --soft HEAD~1
コマンド。1
前の送信である場合、最後の送信を取り消すことを意味します~2
。このコマンドはシステムの問題とシステム以外の問題
を区別しないため、このコマンドを最初に使用できます。windows
windows
2.2.1.3git reset --soft 版本号
書き込み
取り消したいバージョンがかなり前のものであり、^
1 つまたは複数の番号でロックできない場合は、 をgit log
使用して以前の送信レコードを表示し、バージョン番号に従って取り消すことができますgit reset --soft 版本号
。
また、コードの別のモードにフォールバックするには--mixed
、--hard
(慎重に) を使用する必要があることにも注意してください。
以下の図に示すように、ログの状況が表示されます。
D:\workspaces\testproject>git log
commit 15047ee4229c4c0255a62816290c2a41068e8327 (HEAD -> master)
Author: lingsf <944916889@qq.com>
Date: Tue Jan 3 20:16:53 2023 +0800
提交9文件
commit 09f0fd5e00d863ccab839824c0ac11f2c82dabf2
Author: lingsf <944916889@qq.com>
Date: Tue Jan 3 20:04:43 2023 +0800
提交8文件
commit 9e10843e96f7cd5a138f405231f06c61e83c4429
Author: lingsf <944916889@qq.com>
Date: Tue Jan 3 19:48:54 2023 +0800
提交7文件
commit 05fd4925cf0e4341a404d5c5596470d6053d7319
Author: lingsf <944916889@qq.com>
Date: Tue Jan 3 16:40:48 2023 +0800
このバージョンにフォールバックします提交7文件
。
D:\workspaces\testproject>git reset --soft 9e10843e96f7cd5a138f405231f06c61e83c4429
D:\workspaces\testproject>git log
commit 9e10843e96f7cd5a138f405231f06c61e83c4429 (HEAD -> master)
Author: lingsf <944916889@qq.com>
Date: Tue Jan 3 19:48:54 2023 +0800
提交7文件
2.2.2 一時保管場所に撤退する前に—git reset --mixed
一時記憶域 (つまり以前) に元に戻したい場合は、に変更するgit add .
だけです。その他の使い方は上記と同じです。--soft
--mixed
2.3 コミット後のコメントの変更
実際、コメントが適切に書かれておらず、もう一度修正したいという理由だけでコードを取り消してしまうことがよくあります。commit
次のコメントを変更したいだけの場合は、コマンドを使用しcommit
てリモートブランチをプッシュする前に vim 編集スペースに入り、入力を入力して編集モードに入り、一番上のコメントテキストを変更し、変更後にキーをクリックします。次にEnter を押して保存し、終了します。以下に示すように:git commit --amend
i
esc
:wq
もちろん、リモート ブランチにプッシュされている場合は、このコマンドを通じてログの内容も変更できますが、変更後に新しいログ レコードが送信され、リモートには古いコメントが残ります。
さらに、ローカルで 2 回提出しcommit
、指示を 2 回記入した場合、修正できるのは最後の 1 つだけです。
2.4 リモートウェアハウスがプッシュされた後の元に戻す
リモート ウェアハウスへのプッシュとローカル ウェアハウスへの送信に違いはなく、 、 、--soft
および--mixed
元に戻す 3 つのモードを引き続き使用できます--hard
。なぜなら、どのモードを使用しても、取り消しは実際にはローカル コードであり、リモートとは何の関係もありません。コードを取り消した後に元のブランチにマージして戻すか、新しいブランチをプルするかについては、コードは影響を受けません。リモートブランチ。
さまざまなモードのコードをフォールバックするために (注意して)使用してください--hard
。
また、リモート ブランチにプッシュされたコード レコードは元に戻すことができません。ローカルの変更を元に戻して送信することのみが可能ですが、以前の送信レコードを元に戻すことはできません。
3. 実際の操作
3.1 シナリオ 1: オンライン ブランチがカバーされ、新しい機能が追加されます。
かつて、オンライン プロジェクトにフォローアップのレンタル在庫需要が追加され、研究開発はオンラインの本店によって直接開発されました。ただし、テストなどの問題により、新規に開発した機能を直接起動することはできません。その後、いくつかのバグがオンラインで報告され、修正が必要になりました。オンライン支店はすでに後続のレンタル在庫のコードを追加しているため、この場合、オンライン支店をロールバックしたい場合は、次の手順を実行できます。
3.1.1 新しい一時ブランチのプル
まず、現在の支店 (その後の株式の賃貸需要を含む) に基づいて、新しい一時的な支店を引き出します。
3.1.2 コミットレコードを通じてロールバック場所を見つける
送信指示 (ここでは、コード送信の備考を正しく記述することの重要性を反映しています) に基づいて、コードが最初に後続のレンタル ストックを送信する要求ポイントを見つけ、その前のバージョン番号を記録します。以下のように:分析後、オンライン ブランチの状態にロールバックするには、この時点まで
ロールバックする必要があります。19f5a4a3
--hard
3.1.3フォールバックコードに基づく
上の図の右側にあるバージョン番号に基づいて19f5a4a3b87f0478a9ed061de5fa0e756a36c295
、「コピー」をクリックし、新しく取得した一時ブランチに「 」と入力して、git reset --hard 19f5a4a3b87f0478a9ed061de5fa0e756a36c295
このブランチのコードのロールバックを完了します。テストに問題がなければ、ブランチをマージするか、ブランチの名前を変更します。 master ブランチの新しい行に追加します。
3.2 シナリオ 2: 一部の関数はローカル コードで記述されていますが、まだ送信されていません
メイン ブランチにローカルで新しい機能を追加する場合、主に多くの開発済みのものを追加し、まだ提出していないことが原因です。このとき、オンラインで緊急に問題を解決し、修正する必要があるかもしれませんが、新たに追加されたコードはまだ完成していないため、前のブランチを変更するには、この時点で行う必要があります。
3.2.1 現在のコードに基づく新しいブランチ
コードをウェアハウスに送信しないでください。コードが送信された場合は、前の手順に従って (-hard は使用できません) ロールバックし、最初にそれを使用してブランチを引き出しますgit checkout -b 新分支名
。コードを少なくともこのブランチのローカル リポジトリにコミットします。
3.2.2 元のブランチに切り替える
新しいブランチ コードが送信されてからメイン ブランチに戻ると、このブランチはまだオンライン ブランチであるため、必要な問題を緊急に修正できます。
4. まとめ
コードの取り消しは頻繁に使用される機能で、最もよく使用されるコマンドはコメントgit reset
のgit reset --amend
変更です。使用する際には必ず注意してください--hard
。練習すれば違いが分かるようになります。