gitは熟練した命令を身につけなければならない.


開発中に遭遇する可能性のあるシーンを組み合わせたので、長編ですが、gitの動作メカニズムを理解するのに役立つと思います.ハードバックコマンドではなく、gitの動作メカニズムを理解するのに役立ちます.
HEADポインタは常に現在のブランチの最新バージョン番号を指し、HEAD^,HEAD^,^の個数nまたはHEAD~n、nは前のnバージョン番号を表す.
プロジェクトでlinuxrmを直接使用すると、ワークスペースのファイルのみが削除され、git rmはワークスペースのファイルを削除しながらステージから削除されるか、git rm--cachedを使用してステージからのみ削除されます.
いくつかの基本的な操作
#    
git config --global user.name "your username"
git config --global user.email [email protected]
git config --global color.ui true

#
mkdir git_proj & cd git_proj
git init
echo "# readme.md" >> README.md
git add README.md
git commit -m "readme commit"
#                origin
git remote add origin [email protected]:username/repositoryName.git
#          origin   master          (-u    ,       )
git push -u origin master

#       origin   master              tmp   
git fetch origin master:tmp
#    tmp     master         
git diff master tmp
#    tmp     master   
git merge tmp

# clone copy             
git clone [email protected]:username/repositoryName.git

# pull    origin   master             
#          
git pull origin master



checkout
checkoutコマンドには、ブランチの切り替えと現在のステージバージョンまたはrepositoryバージョン1へのファイルのロールバックの切り替え、ブランチの切り替えの2つの主要な役割があります.
#     new_branch   
git checkout new_branch
#        new_branch   
git checkout -b new_branch

2、ワークスペースのファイルを最新のステージバージョンまたはrepositoryバージョンにロールバックします.すなわち、ステージまたはrepositoryから最新のバージョンをチェックアウトします.
# --                          branch    
git checkout -- 

ロールバックすると、repositoryの最新バージョンが使用されない場合は、stageに対応するファイルがあるかどうかを確認します.あるファイルに対して何度も変更とadd操作を行った後、checkoutを使用してファイルを最新のaddのバージョンにロールバックするしかありません.しかし、いくつかのシーンでは、repositoryの最新バージョンにロールバックしたい場合があります.どうすればいいですか?resetコマンドに合わせると簡単にできます.まずコマンドを与えます.
git reset HEAD  & git checkout -- 

これにより、ワークスペースのfilenameをrepositoryの最新バージョンにロールバックできます.具体的な原理は実例で詳しく説明します.
reset
gitのresetコマンドは回り道で、辛抱強い理解が必要です.簡単に言えば、resetには3つのリセットレベルがあり、各レベルの役割を正確に理解する必要があります.
ソフトウェア:バージョン番号をロールバックします.repositoryに作用する
mixed:バージョン番号をロールバックし、stageをリセットします.repositoryとstageに作用する
hard:バージョン番号をロールバックし、stageをリセットし、ワークスペースのソースコードをリセットします.repository,stage,workspaceに作用する
repositoryのバージョン番号を簡単に示し、demoのために3つのレベルのresetをそれぞれ試します.
git log

version D (HEAD) 

コマンド形式:
git reset [--soft|--mixed|--hard] version_no 

--soft:単にrepositoryのHEADポインタをバージョン番号に移動します.ステージとワークスペースには何の変化もありません.
#   HEAD              git log                  
git reset --soft HEAD^
#     
version C 

--mixed:デフォルトでは、repositoryのHEADポインタを指定したバージョン番号に移動し、このバージョンでstage領域をリセットするため、ワークスペースの一部のファイルがunstage状態になる可能性があります(ワークスペースのファイルがrepositoryのバージョンと一致しない場合).ここではファイルを指定できます.ソフト自体はファイルに関係なくhardはファイルを個別に指定できず、すべてリセットするしかありません.
# HEAD        HEAD 
git reset HEAD^2 
#     
version B 

HEADポインタはversion Bを指し、ステージはversion Bのファイルでリセットされ、ワークスペースは影響を受けません.
ここには実用的なテクニックがあります.
git reset version_no  & git checkout -- 

この2つのコマンドを組み合わせると、ワークスペースの指定ファイルをrepositoryの対応するversion_にロールバックできます.Noバージョン.version_NoがHEADであれば、ファイルを最新のコミットにロールバックできます.
--hard:慎重に使え!!!RepositoryのHEADポインタを指定したバージョン番号に移動し、ステージ領域とワーク領域のソースコードをリセットします.ここで特に注意してください.ワークスペースのソースコードも上書きされてリセットされ、あなたの修正はすべて失われます.簡単に言えば、コードを指定したバージョンに完全に復元します.hardはファイルを指定できません.ロールバックするか、ロールバックします.
# HEAD        HEAD 
git reset --hard HEAD^3
#     
version A 

このとき、HEADポインタはversion Aを指し、ステージとワークスペースのファイルはversion Aのファイルにリセットされます.プロジェクト全体の状態はversion Aの提出時にリターンキーを押した瞬間に完全に戻ります.
rm
git rmはrmを直接使用するのとは異なり、git rmはワークスペースとstageエリアの内容を削除します.注意:ここではgit checkoutを使用することはできません.ロールバック操作はできません.ワークスペースにもfilenameファイルがないので、repositoryに関連付けることはできません.git reset HEADを使用してstageのこのファイルをリセットし、git checkoutを使用するしかありません.
git rm [--cached] [-r] [-f] 

ここでヒントとして、ステージのファイルを削除してgitの管理からファイルを離すだけで、
git rm --cached 

このときワークスペースのfilenameは削除されませんが、ステータスはuntrackedに変更され、stageはfilenameのステータスが削除されたことを記録し、コミットするとバージョンライブラリにfilenameが削除されたバージョンが追加されます.ステージ内のファイルを削除するのとresetコマンドを使用してステージ内のファイルをリセットするのとでは異なり、削除するとファイルの状態がuntrackedに変更され、リセットするとファイルの状態がunstageに変更されます(ワークスペースとステージファイルの内容が一致しない場合).
インスタンスシーン:
1、ワークスペースのあるファイルを指定したrepositoryバージョンにロールバックする
仕事の中で、私たちはあるファイルに対して何度も修正とaddからstageまでの操作をして、それから構想が完全に間違っていることに気づいて、再設計開発が必要です.
例えばファイルfooのA版を一度提出した後、B版とC版の2回の修正を行い、addをstage区に送りました.3回目の修正後、D版は最初から考えが間違っていて、再設計する必要があることに気づきました.その時git checkout--fooをそのまま使うと最初のA版は手に入らない.stageエリアにはfooのC版が保存されているからだ.このときgit reset HEAD fooコマンドを使用することができ、repositoryの最新バージョン番号にfooのA版が格納されており、コマンドはHEADを移動せずにfoo A版を使用してステージ領域をリセットします.コマンド実行後のステージエリアのfooファイルはすでにA版です.git checkout--fooを使用すると、ワークスペースのfoo D版をA版にロールバックできます.次のようになります.

git reset HEAD foo & git checkout -- foo

HEADは現在のバージョンを表しますので、HEADポインタは移動しません.同時にstage領域はrepositoryの現在のバージョンのfilenameにリセットされます.つまり、stage領域に格納されているfilenameはrepositoryと同じです.git checkoutを使用すると、ワークスペースのfilenameをrepositoryの現在のバージョンにロールバックできます.実はreset--mixedを使用するとstage領域がリセットされ、checkoutはstage領域のファイルが作業ディレクトリにチェックアウトされます.もちろん、resetは柔軟で、任意に指定したバージョンをロールバックすることができます.
実は現在のバージョンにロールバックするだけなら、同じ機能を実現するコマンドもあります.
git rm --cached  & git checkout -- 

git rm--cachedはstageのこのファイルを削除し、ファイルの状態がuntrackedになり、checkout時にstageの木にこのファイルがあることを発見するため、repositoryの現在のバージョンでこのファイルをチェックアウトします.
diff
git diff--ワークスペース比較暫定領域git diff--cached--暫定領域比較ローカルライブラリ現在バージョンgit diff HEAD~N--ワークスペース比較ローカルライブラリN個目バージョンgit diff HEAD^--HEAD比較HEAD^git diff master tmp--master比較tmpgit diff SHA 1 SHA 2--2個の履歴バージョン間の差異比較
まだ终わってない...未完成...更新待ち....