1. statusコマンドとdiffコマンド
以前に readme.txt ファイルを正常に追加して送信しました。readme.txt を次のように変更します。
リーリーgit status コマンドを実行して結果を確認します。
リーリーgit status コマンドを使用すると、ウェアハウスの現在のステータスを追跡できます。上記は、readme.txt が変更されたことを示していますが、送信する準備ができている変更はありません。
git diff コマンド:
リーリー名前のとおり、git diff は差分を表示するためのもので、上記のコマンド出力からわかるように、最初の行に「distributed」という単語を追加しました。
readme.txt に変更を加えた後、それをウェアハウスに送信します。変更の送信と新しいファイルの送信は、同じ 2 つのステップ、git add と git commit です。 リーリー
注意
2. バージョンのロールバック
リーリー
readme.txtを再度送信しますリーリー
これまで何度も書類を提出しましたが、どの書類があるのか知りたいですか?バージョン管理システムには、履歴を表示できるコマンドが必要です。Git では、git log コマンドを使用して表示します。 リーリーgit log コマンドは、最新のものから最も遠いものまで 3 つのサブミッションを表示します。最新のものは add distribution、そして最も古いものは write a readme file です。 Commit 36281**2e1e0 はコミット ID (バージョン番号) です。出力情報が多すぎると思われる場合は、
$ git log --pretty=onelineを使用すると、3628164...882e1e0 のような一連のコミット ID (バージョン番号) が表示されます。 。 新しいバージョンが送信されるたびに、Git は実際にそれらをタイムラインに自動的につなぎ合わせます。次に、readme.txt を以前のバージョン (「配布追加」のバージョン) にロールバックします。
まず、Git は現在のバージョンがどのバージョンであるかを知る必要があります。Git では、最新のコミット 3628164...882e1e0 (私のコミット ID はあなたのものとは明らかに異なることに注意してください) を表すために HEAD が使用されます。以前のバージョンは HEAD^ です。 もちろん、100^ と書いた方が前のバージョンを 100 個数えやすいので、
HEAD~100と書きます。 ここで、現在のバージョン「append GPL」を以前のバージョン「add distribution」にロールバックしたい場合は、git restart コマンドを使用できます:
リーリー
3、新しいバージョンに復元 前のセクションのバージョンのロールバックに続いて、readme ファイルを作成して以前のバージョンにロールバックを続けることができますが、ここでリポジトリの git ログのステータスを見てみましょう:
最新バージョンの Append GPL は表示されなくなりました。 21 世紀から 19 世紀へタイムシャトルに乗ったようなもので、戻りたくても戻れない場合はどうすればよいでしょうか?
右側の環境がまだ存在している限り、追加 GPL のコミット ID が 3628164... であることがわかります。したがって、将来に遡ってバージョンを指定できます:
リーリーバージョン番号全体を書き留める必要はなく、最初の数桁だけを書き留めれば、Git が自動的に見つけてくれます。もちろん、最初の 1 つか 2 つだけを書くことはできません。Git は複数のバージョン番号を見つけて、それがどれであるかを判断できない可能性があるからです。
readme.txtの内容が閲覧できます $ cat readme.txt
.Git のバージョンのロールバックは、Git が現在のバージョンを指す内部 HEAD ポインターを持っているため、非常に高速です。バージョンをロールバックすると、Git は HEAD を、GPL の追加を指すものから、配布を追加するものに変更するだけです。
4. git reflog コマンド
これで、特定のバージョンにロールバックしましたが、新しいバージョンに復元したい場合はどうすればよいでしょうか?新しいバージョンのコミット ID が見つからない場合はどうすればよいですか?
Git
なら安心です。$ git replace --hard HEAD^ を使用して追加分散バージョンにロールバックし、その後、追加 GPL に復元する場合は、追加 GPL のコミット ID を見つける必要があります。 Git は、実行したすべてのコマンドを記録するコマンド git reflog を提供します。 リーリー 2行目を見ると、append GPLのコミットIDが3628164であることがわかり、再度見つけることができます。
以下の 2 つのセクションから学ぶことができることに注意してください:
5、基本概念
工作区:就是你在电脑里能看到的目录,learngit文件夹就是一个工作区,比如我们环境中当前的目录。
版本库:工作区有一个隐藏目录.git 这个不算工作区,而是Git的版本库。
暂存区:英文叫stage,或index。一般存放在git 目录下的index文件(.git/index)中,所以我们把暂存区时也叫作索引(index).
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
我们把文件往Git版本库里添加的时候,是分两步执行的:
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以现在git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后一次性提交暂存区的所有修改。
实践理解暂存区
现在我们对readme.txt做个修改,比如追加一行内容:
echo "Git has a mutable index called stage." >> readme.txt
然后,在工作区新增一个LICENSE文本文件
echo "LICENSE is a new file." > LICENSE
用git status查看一下状态,Git显示结果,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked。
现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下,通过图可以理解为:
所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
$ git commit -m "understand how stage works"
一旦提交后,如果你又没有对工作区做任何修改,用git status查看下,没有任何内容,现在版本库变成了这样,暂存区就没有任何内容了: