Git はファイルを完全に削除しますか?
習慣沉默
習慣沉默 2017-05-02 09:47:07
0
7
588
リーリー

3 行目 commit を実行し、次にプロンプ​​ト

を実行しました。 リーリー

それでは git checkout -- b.txt してもステージング領域に復元できますか?なぜ完全に削除されなかったのでしょうか?

習慣沉默
習慣沉默

全員に返信(7)
PHPzhong

初心者。 。 。いくつかのチュートリアルを書きます。 。 。 。 。

原則として、git にはファイルをローカルに保存するための 3 つの異なる場所があります。

  1. ワーキングツリー: これは、表示されるすべてのファイルとフォルダーを表します

  2. index: これは実際には次のリポジトリのように .git フォルダーに保存されます (保存形式についてはここでは説明しません).git文件夹里面(在此不讨论保存的格式)

  3. 版本库: 保存了所有提交的版本。

在所有东西都提交之后,WorkingTree、index 区和版本库中最新的提交内容是一模一样的。

git add 的意思是用 WorkingTree中的文件替换/更新index区中的文件。因此git add b.txt之后就是用当前保存的b.txt更新index中的 b.txt 文件。

rm b.txt 仅仅是一条 linux 命令,就是删除文件的意思。对git来说这样只是在WorkingTree中删除了b.txt

git commit 的意思是把 index 中的文件打包起来放入版本库。由于此时b.txt还在 index 区,所以git commit 仍旧会把b.txt更新到版本库中。

Changes not staged for commit:
        deleted:    b.txt

这里显示了当前WorkingTree和index区的区别:
当前WorkingTree中删除了b.txt文件,但是index还存在这个文件。

no changes added to commit

这个提示应该说是一个警告,由于git commit 的意思是把index区的内容打包放入版本库,可是由于之前commit过了,而且没有add新的东西,所以index区的内容和最新提交是一样的,git没有必要再保存一次,所以显示“没有东西可以commit”

git rm 这条命令的意义是从index区和WorkingTree中删除某个文件,所以git rm b.txt之后index中就没有了b.txt。 就这样

git checkout <branch> 的意思是用branch中最新的提交更新WorkingTree和index区中的内容。由于不可逆,所以如果这两个地方的内容没有提交到版本库的话这条命令会给出提示。
git checkout -- filename的意思是用index区的内容替换WorkingTree的某个文件--是可选的,表明这个参数之后的都是文件名。(因为有些时候分支/Tag有可能与文件重名)

额外附送一条命令。。。
git status

🎜🎜リポジトリ: 送信されたすべてのバージョンを保存します。 🎜🎜 🎜すべてが送信された後、WorkingTree、インデックス領域、リポジトリ内の最新の送信はまったく同じになります。 🎜 🎜git add は、インデックス領域のファイルを WorkingTree 内のファイルに置き換え/更新することを意味します。したがって、git add b.txt の後、インデックス内の b.txt ファイルは、現在保存されている b.txt で更新されます。 🎜 🎜rm b.txt は単なる Linux コマンドで、ファイルを削除することを意味します。 git の場合、WorkingTree の b.txt を削除するだけです。 🎜 🎜git commit は、インデックス内のファイルをパッケージ化し、リポジトリに置くことを意味します。この時点では b.txt はまだインデックス領域にあるため、git commit は引き続き b.txt をリポジトリに更新します。 🎜 リーリー 🎜これは、現在の WorkingTree とインデックス領域の違いを示しています。
b.txt ファイルは現在の WorkingTree から削除されましたが、このファイルはインデックス内にまだ存在します。 🎜 リーリー 🎜 git commit はインデックス領域の内容をリポジトリにパッケージ化することを意味するため、このプロンプトは警告であると言えます。ただし、以前にコミットされており、新しいものは追加されていません。インデックスエリア 内容は最新の投稿と同じで、gitは再度保存する必要がないため、「コミットするものはありません」と表示されます🎜 🎜git rm このコマンドの意味は、インデックス領域と WorkingTree からファイルを削除することです。そのため、git rm b.txt の後には b がありません。インデックス .txt。 それです🎜 🎜git checkout <branch> は、WorkingTree とインデックス領域の内容をブランチ内の最新のコミットで更新することを意味します。これは元に戻すことができないため、これら 2 つの場所のコンテンツがリポジトリに送信されていない場合、このコマンドはプロンプトを表示します。
git checkout -- filename は、WorkingTree 内のファイルをインデックス領域のコンテンツに置き換えることを意味します。-- はオプションであり、このパラメータ以降のすべてがファイルであることを示します。名前。 (ブランチ/タグがファイルと同じ名前を持つ場合があるため)🎜 🎜追加のコマンドが含まれています。 。 。
git status これは、WorkingTree とインデックス領域の違い (デフォルトは赤)、およびインデックスと送信された最新バージョンの違い (デフォルトは緑?濃い緑?) を表示することを意味します。さらに、お互いに最新情報を更新する方法についてのヒントも提供されます。 🎜
いいねを押す +0
为情所困

試してみるgit rm filename

いいねを押す +0
巴扎黑

質問者はまず、git に add 操作が必要な理由を知る必要があります。git には最初にコマンドラインしかないため、add 操作は GUI でのファイル選択操作と同等であるため、add 操作と commit 操作は 1 つの操作と見なす必要があります。全体 (GUI と同様に、下でファイルを選択して送信できます) は分割しないでください。

いいねを押す +0
滿天的星座

1.git add b.txt //b.txtをワークスペースから一時記憶領域(ステージ)に追加
2.rm b.txt //ワークスペース内のb.txtを削除するが、gitリポジトリからファイルを削除するための rm b.txt は実行されませんでした
3.git commit -m 'b.txt ファイルの削除'//git rm b.txt は実行されなかったので、1 の内容のみをコミット送信しました
-->git rm b.txt を 2 から 3 の間に実行してファイルを削除する必要があります

いいねを押す +0
阿神

注意して頂きたいのですが、gitにおけるファイル名の変更と削除はほぼ同じで、それぞれgit rmコマンドとgit mvコマンドを使って操作する必要があります。 git のガイドをよく見てください

いいねを押す +0
巴扎黑

ファイルを削除します:
ワークスペース内のファイルを削除します、ファイル名を rm します
2 つの状況があります:

git rm ファイル名
git commit -m 'description'
2番目のケース:誤ってファイルを削除してしまう
git checkout -- ファイル名

いいねを押す +0
巴扎黑

前に追加された git rm が 1 つ減りました

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート