git はローカル ウェアハウスに送信されたコードを削除します

使用シナリオは次のとおりです: 開発プロジェクトでは、関数は最初のバージョンで記述されましたが、バージョンの反復プロセス中にその関数が削除されました。これは、関数のコア コードが削除されることを意味します。コードはすでに送信されています ローカル ウェアハウスがすでにある場合、ローカル ウェアハウスに記録されているコードを削除するにはどうすればよいですか?

まず、多くの人はローカル コードを直接削除して送信し、プッシュすることを考えると思いますが、これは実現可能でしょうか。

実験

首先将一个项目代码提交到本地仓库,再推送到远程分支,如下图:

项目路径是`app/customer/cmd/rpc/internal/logic`

包含了如下的文件:

ここに画像の説明を挿入します

本地仓库和远程仓库是一致的

项目中使用`git ls-files -c`命令查看本地仓库文件

打印行数太多就不全部截图了(截取一部分)

ここに画像の説明を挿入します
ワークスペース ファイルのみを削除すると、次のフォルダー内のファイルは
ここに画像の説明を挿入します
次の図のようになります。キャッシュ領域とローカル ウェアハウスにはまだファイルが残っています。新しいコードが送信されると、新しいコードのみがブランチにマージされます。それらのワークスペース 削除されたファイルはまだ存在します。

代替

そして、jetbrains の IDE を使用すると、次のように問題が直接視覚化されることがわかります。

ここに画像の説明を挿入します
これらのローカルに削除されたファイルはグレー表示され、キャッシュ領域にまだ存在し、再送信することもできますが、ローカルで使用できなくなっているため、ファイルを変更することはできません。

では、どうやって削除すればよいのでしょうか?

プラン

通常、キャッシュ領域とローカル ウェアハウスはカスケードで動作するため、git コマンドを使用してローカル ウェアハウスの内容を削除するだけで済みます。

  • git git revertコードのバージョンを切り替えてコンテンツを削除します

git は分散マルチブランチ マネージド コード ウェアハウスであるため、git 実装はローカル反復を実装し、異なるバージョン間で切り替えることができます。git が特定のHEADブランチを指している場合、更新されたバージョンが更新されるときにバージョン ラベルも設定されます。

ここに画像の説明を挿入します
上の図に示すように、バージョンをロールバックすると、現在のバージョンで送信されたコードが削除される可能性があります。特定のファイルを削除すると、以前のバージョンのファイルに戻ります。しかし、この方法で直面する問題は、新しい関数のコードや、削除する必要があるファイルと関係のないコードも多くロールバックされており、それらを書き直して再送信する必要があることです。コードが多くのバージョンで更新されている場合。(大きな問題がない限り、この方法は通常お勧めしません)

  • git reset文書の撤回

このメソッドは、ファイルを git add 前の状態に取り消すために、git の追跡ステータスを直接要求します。これは、ファイルを送信しないことと同じです。

ここに画像の説明を挿入します
撤退操作では、ローカル ウェアハウスとキャッシュ領域が連結され、自動的に一緒に撤退され、直接 git add 前の状態に戻り、ローカル ウェアハウスはコンテンツのない新しいウェアハウスとなり、キャッシュ領域も空になります。あとは、フォルダー内の必要なファイルと不要なファイルを削除するだけです。git add と git commit を再度実行すると、ローカル ウェアハウスが更新されます。

ここに画像の説明を挿入します
上の図に示すように、最初に送信されたファイルが削除されたことも記録からわかります。ローカル ウェアハウスを確認してください。

git ls-files -c

ここに画像の説明を挿入します
上図のように、元のapp/customer/cmd/rpc/internal/logicディレクトリは全く新しい内容になっています。

  • git rm --cachedウェアハウスファイルを削除する

git rm --cachedこのコマンドは git replace コマンドに似ていますが、論理的には異なります。rm は、指定されたファイルの git 関連のコンテンツを直接削除します。

ここに画像の説明を挿入します
git rm コマンドは、ウェアハウスおよびキャッシュ領域内の指定されたファイルも削除し、git add のない状態に戻します。

git rmと は、git resetGit の 2 つの異なるコマンドであり、動作が異なります。

  1. git rm は、バージョン管理からファイルを削除するために使用されるコマンドです。これは 2 つの操作を実行します。ローカル ファイル システムからファイルを削除し、削除を Git のバージョン履歴に記録します。こうすることで、ファイルはコード ベースに表示されなくなり、変更をコミットした後に回復できなくなります。git rm <filename> コマンドを使用して、削除するファイルを指定できます。

  2. git replace は、コミットを元に戻すか、HEAD が別のコミットを指すようにするために使用されます。現在の作業ツリーとステージング領域の状態を変更するために使用されます。git replace を使用すると、コミットを元に戻し、その変更を破棄できます。また、ブランチ ポインターを別のコミットに移動して、現在のコード ベースの状態を変更するために使用することもできます。

  3. git replace コマンドを使用してコミットを指定すると、HEAD はコミットを指し、現在の作業ツリーとステージング領域はそのコミットの状態に復元されます。git replace --hard コマンドを使用してコミットを指定すると、HEAD がそのコミットを指し、現在の作業ツリーとステージング領域への変更が完全に破棄されます。

要約すると、git rm はファイルの削除に使用され、git restart はコミットの取り消しまたは変更に使用され、ブランチ ポインターの移動に使用できます。これら 2 つのコマンドは Git で異なる役割を果たします。ニーズに応じて、適切なコマンドを選択して目的の操作を実行します。

おすすめ

転載: blog.csdn.net/xwh3165037789/article/details/132121676