gitの基本的な理論と操作

gitの基本的な理論

  1. Gitの作業領域

    作業ディレクトリ(作業ディレクトリ)、ステージングエリア(ステージ/インデックス)、リソースライブラリ(リポジトリやGitのディレクトリ):ローカルGitは3つの作業領域があります。リモートgitリポジトリを追加した場合(リモートディレクトリ)は、4つの作業領域に分けることができます。これらの四つの領域間のファイル変換の関係を次のように

    • ワークスペース:あなたは通常、プロジェクトコードの保管場所にワークスペースがあります
    • インデックス/ステージ:あなたの変更を一時的に格納するためのステージング領域が、実際にはそれだけのファイルですが、提出する情報のリストにファイルを保存しました
    • リポジトリ:データが安全である、あなたは、データのすべてのバージョンにコミットがある倉庫地区(またはローカル倉庫)、。倉庫の中に最新のバージョンを指すHEAD
    • リモート:リモートリポジトリ、マネージコードサーバは、単にリモートデータ交換のためのコンピュータでのプロジェクトチームと考えることができます

    3つのローカルエリア正確には、尖ったgitリポジトリHEADバージョンでなければなりません

    • ディレクトリ:私たちのワークスペース、Gitの管理スペースが含まれている倉庫でGitのディレクトリ管理を使用してください。
    • ワークスペース:ワークスペースのディレクトリの必要性と、ファイルのバージョン管理にGitを経由して、これらのディレクトリとファイル。
    • .git:Gitのストレージディレクトリ管理情報、倉庫初期化が自動的に作成されます。
    • インデックス/ステージ:ステージング領域、またはレポを入力して送信する前に、我々はステージングエリア内のすべての更新を置くことができ、提出する更新エリアを呼び出します。
    • 現地レポ:ローカルリポジトリに保存されている地元の倉庫、; HEADだけで、現在の開発ブランチ(支店)となります。
    • スタッシュ:隠された、それは、ワークスペースの一時的な状態を保存/復元するために使用作業状態保存スタックです。
  2. Gitのワークフロー

    gitのワークフローは次のように一般的です。

    ファイルを変更、追加するための作業ディレクトリにある1;

    2は、ステージング領域にファイルをバージョン管理する必要があります。

    図3は、ステージング領域のファイルのgitリポジトリに提出されます。

    したがって、gitの管理ファイルには、以下の3つの状態があります。変更(修正)、ステージング(上演)となっているに提出されました(コミット)

  3. グラフィックチュートリアル

個人的にGitリポジトリの原理は、コントローラまたは複合体の他のバージョンに比べ、より直感的なグラフィカルなチュートリアルがあると思います。

操作のgitの基本的な操作(運転指令のbashのgit)

  1. 一般的に使用するコマンドの作業ディレクトリを作成します。

    一般的には、ディレクトリ(ワークスペースを)作業があなたのプロジェクトのディレクトリにすることができ、あなたのGitのヘルプファイルのフォルダを管理したいということです、それは空のディレクトリであることができ、中国を持ってしないことをお勧めします。

    ただ、次のチャートを覚えて、毎日6つのコマンドを使用します。

  2. 取得GITリポジトリ

    二つの方法でローカルリポジトリを作成する方法:1、新しい倉庫を作成することですが、他には、リモートリポジトリをクローンしています。

    • 新しい倉庫を作成します

      gitのbashは新しいリポジトリを作成して入力します。

      # 在当前目录新建一个Git代码库
      $ git init

      gitのは、次のように作成したばかりの.gitディレクトリをレポジトリ:

      実行後などのバージョン、に関するすべての情報は、このディレクトリにある、唯一のより多くのプロジェクトのディレクトリ.gitディレクトリの中に見ることができます。

      あなたは、次のコマンドを使用している場合はもちろん、あなたは完全なカタログと倉庫を作成するために一緒に置くことができます。

      # 新建一个目录,将其初始化为Git代码库
      $ git init [project-name]

    • クローンリモートリポジトリ

      あなたはgithubのとgiteeからリモートリポジトリのクローンを作成することができます。

      クラウドリモートリポジトリ住所などFastjsonコード:https://gitee.com/wenshao/fastjson

      gitのbashコマンドラインにクローンgitのリモートリポジトリにhttps://gitee.com/wenshao/fastjsonコードをプルダウンすることができます

  3. gitのファイル操作

バージョン管理は、他の操作に提出ファイルを変更したいというファイルのバージョン管理、である、あなたは最初の文書が提出され、またはに提出する書類を提出していないしたくないものをファイルの現在の状態、または今提出することができる知っている必要があります。GITは、ファイルの2つのバージョン間の特定の違いを気にしませんが、変更がある場合、ファイルが変更された場合は、提出のスナップショットを追加するときに、ファイル全体について、ファイルの新しいバージョンが生成され、文書全体を変更するかどうかを決定するための方法が使用することですチェックサムアルゴリズムSHA-1ファイル。

3.1ファイルの4つの状態

  • 人跡未踏:。人跡未踏、このフォルダ内のファイルが、はgitリポジトリに追加していない、バージョン管理はを通じて関与していないgit add状態の変化Staged

  • Unmodify:ファイルは、それが変更され、変更された場合、ファイルの内容とファイルのリポジトリフォルダの二つの場所にあるファイルのまさにこのタイプのスナップショットであること、無修正、ストレージに入れていた。Modifiedあなたが使用している場合。git rmアウトリポジトリの、これは、となっているUntrackedファイル

  • 修正:ファイルには修正するために、変更されており、この文書には他の操作にも通じ二つの場所を持っていません。git add一時的な入力staged状態を、使用してgit checkout変更に戻り、廃棄されたunmodify状態、git checkoutすなわちライブラリファイルから削除、カバーを現在の修正

  • 上演:BSRの実行はgit commit、ライブラリに同期を変更し、ライブラリおよびローカルファイルと一貫性のあるファイルになりますUnmodify実行状態は。git reset HEAD filename一時ファイルのステータスをキャンセルModified

 3.2 查看文件的状态

 ```
 # 查看所有文件的状态
 git status
 # 查看指定文件的状态
 git status filename
 ```

 3.3  添加文件与目录

 工作区(Working Directory)就是你在电脑里能看到的目录。

 版本库(Repository)工作区有一个隐藏目录`.git`,这个不算工作区,而是Git的版本库。

 Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支`master`,以及指向`master`的一个指针叫`HEAD`。

 将untracked状态的文件添加到暂存区,语法格式如下:

 ```linux
 # 添加指定文件到暂存区
 $ git add [file1] [file2] ...
 
 # 添加指定目录到暂存区,包括子目录
 $ git add [dir]
 
 # 添加当前目录的所有文件到暂存区
 $ git add .
 ```

 3.4 移除文件与目录

![](https://img2018.cnblogs.com/blog/1389886/201911/1389886-20191116145850119-1894528153.png)

 当执行如下命令时,会直接从暂存区删除文件,工作区则不做出改变

 ```linux
 #直接从暂存区删除文件,工作区则不做出改变
 git rm --cached <file>
 ```

 通过重写目录树移除add文件:

 ```
 #如果已经用add 命令把文件加入stage了,就先需要从stage中撤销
 git reset HEAD <file>...
 ```

 当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

 移除所有未跟踪文件

 ```
 #移除所有未跟踪文件
 #一般会加上参数-df,-d表示包含目录,-f表示强制清除。
 git clean [options] 
 #只从stage中删除,保留物理文件
 git rm --cached readme.txt 
 
 #不但从stage中删除,同时删除物理文件
 git rm readme.txt 
 
 #把a.txt改名为b.txt
 git mv a.txt b.txt 
 ```

コミットを行う場合には(コミットGIT)、masterブランチでリポジトリ(オブジェクトライブラリ)への一時領域の書き込みでのディレクトリツリーが更新されます。ディレクトリツリーの一時的なディレクトリツリー領域、すなわちマスターポイントが提出されます。

「gitのリセットHEAD」コマンドを実行すると、ツリーのステージング領域を書き換えることになる、木のマスター分岐点に置き換えられますが、作業領域は影響を受けません。

「gitのRM -Cachedを実行する場合 「コマンドは、作業領域は、変更をしないようにされ、ステージング領域から直接ファイルを削除します。

「gitのチェックアウト」を行ったり、「gitのチェックアウト - 「コマンドはすべて、または作業領域に指定されたファイルの一時的な記憶領域に置き換えられます。この操作は非常に危険です、それは、ワークスペースの変更がステージングエリアに追加されていないクリアされます。

実行「gitのチェックアウトのHEADを。」または「gitのチェックアウトHEAD 「コマンドは、すべてのマスターブランチのHEADポイントまたはファイルの一部だけでなく、ステージングエリアとワークスペースのファイルに置き換えられます。このコマンドは非常に危険です、変更がコミットされていないだけで作業領域をクリアしないので、また、コミットされていないでステージング領域への変更をクリアします。

ファイルの3.5の比較

gitのdiffの[ファイル名]:ワークスペースファイルと比較するためのステージング領域
gitのdiffを[歴史のローカルライブラリのバージョン]を[ファイル名]:ファイルのライブラリや地域の歴史ワークスペースは、比較
ファイルなし複数のファイル名を比較

3.6のファイルがチェックアウトされました

ファイルが既に倉庫f4.txtに存在する場合は、チェックアウトの取り消しに、カバレッジをチェックしたい場合は、修正F4に作業領域に、使用することができます

このコマンドは、作業領域を書き換えますので、検出コマンドのgit gitのチェックアウトは、最も一般的に使用されるコマンドのいずれかだけでなく、非常に危険なコマンドです

構文:

#使用して、
Gitのチェックアウトを[-q] [ ] [ - ] ...
#二のの使い方
Gitのチェックアウト[ ]
#は3つの使用
Gitのチェックアウトを[-m] [-b ] -孤児] ] [ ]

Gitのブランチアウト$
#検出ブランチブランチ。ブランチHEADブランチを指すように更新3つの工程図を完了し、一時記憶領域および作業領域の木や枝のポイントを更新するには。

チェックアウトgitの$
#要約ショーの違いワークスペース、ステージング領域とHEAD。

HEADのgit $チェックアウト
#同上。

ファイル名-チェックアウトは$ gitの
ファイル名のファイルのワークスペースをカバーするためにスクラッチパッド付き#ファイルのファイル名を。(行った場合)、最後のgitのは、ローカルの変更をファイル名を追加しますので、キャンセルと同等。

チェックアウト支店は$をgitの-ファイル名
#のHEADポイントはそのまま維持します。ブランチにファイル名がエリアとワークスペースをステージング、それぞれのファイルを置き換える提出することを指摘しました。ファイルのファイル名を直接覆っステージングと作業領域になることに注意してください。

$ Gitチェックアウト- ..または書き込みのチェックアウトのgit
ポイントの#注意のgit checkoutコマンドのパラメータ( "")。このコマンドは、最も危険です!#(ステージング領域に対して)すべてのローカルの変更をキャンセルします。一時領域内のすべてのファイルとローカルファイルを上書きする直接の同等は、ユーザーに確認するためにあらゆる機会を与えていません!

file_name - Gitのチェックアウトは$をcommit_id
#commit_idない場合は、gitのチェックアウト- file_nameには、これまでのローカルリポジトリまでにファイルをリストア表します。

3.7著者

ちょうどそれは、地元のステージング領域ウェアハウスに書類を提出するためにコミット使用して達成することができ、インデックスバッファにgitのアドオンを経由してファイルまたはディレクトリを追加します。

# 提交暂存区到仓库区
$ git commit -m [message]

# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化,直接到仓库区,跳过了add,对新文件无效
$ git commit -a

# 提交时显示所有diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...

Submitを改訂

私たちは書類を提出した後に判明した場合は間違いを犯す、またはちょうどあなたがファイルに変更を加えることができ、コミット変更したい、「gitの追加」を経由して変更されたファイルは、ステージングエリアに追加し、次のコマンドを実行します。

#修订提交
git commit --amend

元に戻す提出(コミット)

コミットオブジェクトへの前者HEADポインタ原理は、ワークエリア、屈折率変化を放棄することです

#撤销上一次的提交
git reset --hard HEAD~1

gitのログが提出したログを表示するには、直接またはシリアル番号を提出指定することができます

撤销提交
git revert <commit-id>
这条命令会把指定的提交的所有修改回滚,并同时生成一个新的提交。

3.8ログ

Viewは、ログがgitのログコマンド構文を使用することができますコミットは次のとおりです。

#查看提交日志
git log [<options>] [<revision range>] [[\--] <path>…?]

「Gitのログ--graph」グラフィカルに簡単に分岐履歴によって提出された情報を表示することができ提出した歴史との関係を、表示するためには、当然のことながら、コンソールは、文字グラフィックで描かれています。

「Gitはログイン-1」の表示行を示します。

あなたはbashの下に入力された使用してコマンド履歴を表示することができます。

3.9ログのすべてのブランチを見ます

更新却下を含め、倉庫のすべての支店のすべての更新を記録しますレコードを「GitはREFLOG」。

3.10ビューファイル一覧

使用GitのLS-ファイルは、次の形式を指示リストファイルの状態を確認することができます:

#查看指定状态的文件
git ls-files [-z] [-t] [-v] (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])* (-[c|d|o|i|s|u|k|m])*

アップデート元に戻す3.11

  • 元に戻すステージングエリア更新

    ステージングエリアに提出更新するために、「gitの追加」を使用してください。そして、先端の出力「gitの状態」私たちすることができます「gitのリセットHEAD ...「一時領域を更新するために、ワークスペースで削除されます

  • ローカルリポジトリの更新元に戻します

    ポインタを使用してHEADを使用してIDをコミット:gitのログビューを使用して二つの方法で提出取り消し、コミットログを

    Gitのでは、現在に提出した最新のHEADブランチへのポインタがあります。現在のバージョンは、私たちは「HEAD ^」、そしてお金を使用して、あなたが以前提出にロールバックする場合は、あなたが「HEAD〜n」を使用することができ、「HEAD ^^」のバージョンを使用することができます。(すなわち、HEAD ^ = HEAD〜1、HEAD ^^ = HEAD〜2)。

    git reset --hard HEAD^
    git reset --hard HEAD~1
    git reset --59cf9334cf957535cb328f22a1579b84db0911e5(commit id)

3.12削除ファイル

  • 削除人跡未踏のファイル

    ファイルがまだ十分でしょうファイルを削除して、状況を追跡しない場合は、bashの使用は、rmファイル、RMファイル名を削除することができます

  • 削除提出

    gitのRM -fファイル名-f力は、削除ステージング領域に物理的、および削除ファイルやワークスペースを削除します

  • 元に戻します

    gitのチェックアウトファイル名

  1. ブランチ

GIT比較的困難にで支店

支店では、Gitリポジトリを学ぼうと、コンピュータ、およびあなたはSVNを学ぼうとしている他の別のパラレルワールドである場合には、SF映画の並行宇宙の中にあります。

二つの平行宇宙が互いに干渉している場合、それはまた、今のあなたに影響力を欠いています。しかし、ある時点で、二つの平行宇宙は結果としてマージし、あなただけではなく、GitがSVNに学んだ学びます!

どのような使用の支店が実際にありますか?一度提出された場合は、コードが終了していないので、ない完全なコードベースではない仕事を他人につながる、コードの50%を書いた最初の週、完了するために、新しい機能を開発する準備ができていると、しかし二週間。コードはすべて終了したので、再び提出し、損失の進捗状況の大きなリスクは毎日がある。場合

さて、ブランチに、恐れることはありません。あなたがあなた自身のブランチを作成して、他の人が見ることはできませんが、またあなた自身のブランチで作業しながら、オリジナルのブランチで作業を続け、開発の完了後までに提出提出したいと思い、その後、ワンタイム合併へそのため、安全と元支店は、他人の仕事には影響を与えません。

非常に迅速にGitのブランチスピード。

今までは、唯一のタイムライン、Gitの中で、このブランチは、masterブランチであるメインブランチと呼ばれます。HEADは、厳密に提出するように指示が、マスターをポイントし、マスターが提出のポイントである、そう、現在のブランチのHEADを指していない話します

頻繁に使用するコマンドをBRANCH:

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 列出所有本地分支和远程分支
$ git branch -a

# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]

# 新建一个分支,并切换到该分支
$ git checkout -b [branch]

# 新建一个分支,指向指定commit
$ git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 切换到上一个分支
$ git checkout -

# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

組み合わせ支店(gitのマージ):

过程描述:
(1) 创建一个远程仓库;
(2) 本地拉取远程仓库的代码到master分支,并在本地创建develop分支用于开发.
(3) 将本地develop分支修改git commit到本地的master分支;
(4) 如果此时远程仓库的代码进行了修改,而我们本地的master未同步远程仓库就会出现代码冲突问题,因为本地的master和远程的master都进行了修改,此时就应该进行合并分支;
(5) 将远程仓库的最新代码拉取到本地master,本地master进行git merge操作,解决代码冲突问题,合并分支,进行提交到远程仓库;

おすすめ

転載: www.cnblogs.com/startway/p/11871875.html