メインコンテンツへ移動

Git チュートリアル

無料2015-05-19#Tool#git指南#git教程#git入门#github

簡潔で包括的な GitHub チュートリアル。日常業務で必要なさまざまな機能の説明とコマンドクイックリファレンスを含む

#Git チュートリアル

###はじめに

ちょっとした歴史、気に入らない方はこちらをクリックしてスキップ

2002 年までに、Linux システムは 10 年発展し、コードベースの巨大さにより Linus は手動での管理が困難になりました。コミュニティの開発者たちもこの方法に強い不満を表明しました。そこで Linus は商用のバージョン管理システム BitKeeper を選択しました。BitKeeper の親会社 BitMover 社は人道的精神から、Linux コミュニティにこのバージョン管理システムを無料で使用する権利を授与しました。

2005 年にこの安定した状況は破られました。Linux コミュニティには達人が集まっており、どうしても梁山泊の好漢たちの江湖気質を帯びていました。Samba を開発した Andrew が BitKeeper のプロトコルをクラックしようとし(実際に彼だけでなく他にもいました)、BitMover 社に発見されました(監視作業が素晴らしかった!)。そこで BitMover 社は怒り、Linux コミュニティの無料使用権を回収すると宣言しました。

Linus は BitMover 社に謝罪し、今後兄弟たちを厳しく管理すると約束するかもしれません。ええ、それはありえません。実際の状況は以下の通りです:

Linus は 2 週間かけて C 言語で分散型バージョン管理システムを自分で書きました。これが Git です!1 ヶ月以内に、Linux システムのソースコードは Git によって管理されるようになりました!牛とはどのように定義されるのでしょうか?皆さんも味わってみてください。

Git は急速に最も人気のある分散型バージョン管理システムとなりました。特に 2008 年、GitHub ウェブサイトがオンラインになり、オープンソースプロジェクトに Git ストレージを無料で提供しました。無数のオープンソースプロジェクトが GitHub に移行し始めました。jQuery、PHP、Ruby などを含みます。

##ゼロ.追加の問題

###1.vim で中文が文字化け

コマンドラインで直接 vim を使用して編集すると、漢字の文字化けが発生します。また、QQ 拼音入力法を使用して vim 内で一部の漢字を入力できません。例えば、中 wen の wen、还有 wu 法の wu が 1 になります utf8 文字化け問題はまだ解決していません(見つけた解決策はすべて突破できませんでした)。vim で直接編集しないことをお勧めします

###2.MINGW32 はデフォルトでコピーペーストをサポートしていません。手動設定が必要です

  1. タイトルバーを右クリックし、【プロパティ】を選択

  2. 【オプション】を選択

  3. 【クイック編集モード Q】にチェック

  4. 【OK】-【OK】

設定はすぐに有効になり、コピー/ペーストをサポートします:

  • コピー:左ボタンでドラッグして選択し、右クリックするとコピー完了

  • ペースト:ウィンドウ内で右クリック

ご質問がある場合はChinaUnix ブログ:windows 下の mingw のコピーペースト をご覧ください

##一.git のインストール

Windows/Mac/Linux での git のインストール方法は廖雪峰的官方网站:Git のインストール をご覧ください

P.S. 廖雪峰先輩の git チュートリアルは非常に優れていますが、あなたはきっと最初から最後まで見る耐心はありません。でも大丈夫です。なぜなら私は見ましたから。できるだけ無駄なくまとめます

##二.ローカル操作

###1.リポジトリの作成

  1. 気に入ったフォルダを見つけて、cd で移動し、その中でリポジトリ(Repository)を作成します

P.S. git コマンドラインツールは実際には簡易版 Linux 仮想マシンであり、Shell コマンドをサポートしています。Linux コマンドをいくつか覚えていれば、より使いやすくなります。一般的な Shell コマンドは博客园:一般的なファイルとディレクトリ操作コマンド (転載) をご覧ください

  1. Git リポジトリを初期化します。git init コマンドを使用します

現在のディレクトリを git リポジトリとして初期化できます。実際にはディレクトリ下に git 管理情報を自動生成するだけです

  1. ファイルの新建

そのディレクトリ下にファイルを新建します。コマンドラインの touch またはエクスプローラーで右クリックして作成することもできます

  1. ファイルを Git リポジトリに追加します。2 つのステップがあります:

    1. git add <file> コマンドを使用してファイルを一時的な保存領域に追加します。注意:複数回使用して複数のファイルを追加できます;

    2. git commit コマンドを使用して一時的な保存領域の変更をコミットします。完了。

P.S. フォルダ下に作成したファイルやファイル内容の追加削除変更は、同期クラウドディスクのように自動同期されません。add-commit して初めて新しいバージョンを作成します

###2.日常業務

  1. ステータスの確認

ワークスペースのステータスを常に把握するには、git status コマンドを使用します。

git status がファイルが変更されたと通知した場合、git diff を使用して変更内容を確認できます。

  1. バージョンの後退と前進

HEAD が指すバージョンが現在のバージョンです。したがって、Git はバージョンの歴史間を移動することを許可します。git reset --hard commit_id コマンドを使用します。

移動する前に、git log を使用してコミット履歴を確認し、どのバージョンに後退するかを決定します。

未来に戻るには、git reflog を使用してコマンド履歴を確認し、どのバージョンに戻るかを決定します。

  1. 変更の取り消し

    • シナリオ 1:ワークスペースの某个ファイルの内容を混乱させて変更し、ワークスペースの変更を直接破棄したい場合、git checkout -- file コマンドを使用します。

    • シナリオ 2:ワークスペースの某个ファイルの内容を混乱させただけでなく、一時的な保存領域に追加した場合、変更を破棄するには 2 つのステップが必要です。最初のステップで git reset HEAD file コマンドを使用すると、シナリオ 1 に戻ります。2 番目のステップでシナリオ 1 のように操作します。

    • シナリオ 3:不適切な変更をリポジトリにコミットしてしまった場合、このコミットを取り消したい場合は、バージョン後退のセクションを参照してください。ただし、リモートリポジトリにプッシュしていないことが前提です。

  2. ファイルの削除

git rm コマンドはファイルを削除するために使用されます。ファイルがすでにリポジトリにコミットされている場合、誤って削除することを心配する必要はありません。ただし注意が必要です。ファイルを最新バージョンにしか復元できず、最後のコミット後に変更した内容は失われます。

  1. ブランチの操作

実際の開発では、いくつかの基本的な原則に従ってブランチ管理を行うべきです:

まず、master ブランチは非常に安定しているべきです。つまり、新しいバージョンのリリースにのみ使用され、普段はそこで作業してはいけません;

ではどこで作業するのか?作業はすべて dev ブランチで行います。つまり、dev ブランチは安定していません。ある時点で、例えば 1.0 バージョンのリリース時に、dev ブランチを master にマージし、master ブランチで 1.0 バージョンをリリースします;

あなたとあなたの仲間たちは皆 dev ブランチで作業し、それぞれが自分のブランチを持ち、時々 dev ブランチにマージするだけです。

ブランチをマージする際、--no-ff パラメータを追加すると通常モードでマージできます。マージ後の履歴にはブランチがあり、かつてマージを行ったことがわかります。fast forward マージではかつてマージを行ったことがわかりません。例:git merge --no-ff -m "merge with no-ff" dev

具体的なコマンド:

- ブランチの確認:`git branch`

- ブランチの作成:`git branch <name>`

- ブランチの切り替え:`git checkout <name>`

- ブランチの作成 + 切り替え:`git checkout -b <name>`

- 某ブランチを現在のブランチにマージ:`git merge <name>`

- ブランチの削除:`git branch -d <name>`

Git が自動的にブランチをマージできない場合、競合を解決する必要があります。競合を解決した後、コミットすると、マージが完了します。

Git は <<<<<<<=======>>>>>>> で異なるブランチの内容をマークします。手動で変更して競合を解消した後、add-commit すればよいです

git log --graph コマンドを使用すると、ブランチのマージ図を確認できます

  1. バグの処理

バグを修正する際、新しい bug ブランチを作成して修正し、その後マージし、最後に削除します;

手元の作業が完了していない場合、まず作業現場を git stash して、その後バグを修正し、修正後、git stash pop して作業現場に戻ります。

  1. 新機能の開発

新しい feature を開発する際、新しいブランチを作成するのが最善です;

マージされていないブランチを破棄したい場合、git branch -D <name> を使用して強制的に削除できます。

###3.人間的な設定オプション

  1. 特殊ファイルの無視

一部のファイルを無視する際、.gitignore を作成する必要があります;

.gitignore ファイル自体はリポジトリに配置し、.gitignore のバージョン管理もできます

  1. コマンドエイリアスの設定

一般的に受け入れられているエイリアス(マクロのようなもので、指を保護するために使用):

- st は status を表します。コマンド `git config --global alias.st status`

- co で checkout を表します。コマンド `git config --global alias.co checkout`

- ci は commit を表します。コマンド `git config --global alias.ci commit`

- br は branch を表します。コマンド `git config --global alias.br branch`

3. エイリアスの削除

各リポジトリの Git 設定ファイルは .git/config ファイルにあり、エイリアスは [alias] の後ろにあります。エイリアスを削除するには、対応する行を削除するだけです

グローバル Git 設定ファイルは ~/gitconfig ファイルにあり、直接編集できます

  1. その他の設定オプション

カスタマイズできる部分は比較的多く、例えばコマンド出力結果のカラーリングスキーム(ファイル名のハイライトなど)

###4.git サーバーの構築

詳細な手順は廖雪峰的官方网站:Git サーバーの構築 をご覧ください

##三.リモート操作

リモート操作とは、ローカルプロジェクトと GitHub 上のプロジェクトを定期的に同期することを指します

###0.準備作業

GitHub アカウントの登録、リポジトリの作成、公開鍵の設定などが必要です。詳細は廖雪峰的官方网站:リモートリポジトリの追加 をご覧ください

###1.リモートリポジトリの関連付け

リモートリポジトリを関連付けるには、git remote add origin git@server-name:path/repo-name.git コマンドを使用します;

関連付け後、git push -u origin master コマンドを使用して初めて master ブランチのすべての内容をプッシュします;

その後、ローカルでコミットするたびに、必要であれば git push origin master コマンドを使用して最新の変更をプッシュできます;

分散型バージョン管理システムの最大の利点の 1 つは、ローカルでの作業がリモートリポジトリの存在を完全に考慮する必要がないことです。つまり、ネットワーク接続の有無にかかわらず正常に作業できます。SVN はネットワーク接続がない場合、作業を拒否します!ネットワークがある場合、ローカルコミットをプッシュするだけで同期が完了します。本当に便利です!

###2.リモートリポジトリのクローン

リポジトリをクローンするには、まずリポジトリのアドレスを知る必要があり、その後 git clone コマンドを使用してクローンします。

Git は複数のプロトコルをサポートしています。https を含みますが、ssh を通じたネイティブ git プロトコルが最も高速です。

###3.複数人での協力

リモートリポジトリの情報を確認するには、git remote -v を使用します;

ローカルで新規作成したブランチは、リモートにプッシュしない場合、他の人には表示されません;

ブランチをローカルからプッシュするには、git push origin branch-name を使用します。プッシュに失敗した場合、まず git pull を使用してリモートの新しいコミットを取得します;

ローカルブランチとリモートブランチに対応するブランチを作成するには、git checkout -b branch-name origin/branch-name を使用します。ローカルとリモートブランチの名前は一致させるのが最善です;

ローカルブランチとリモートブランチの関連付けを設定するには、git branch --set-upstream branch-name origin/branch-name を使用します;

リモートからブランチを取得するには、git pull を使用します。競合がある場合、まず競合を処理する必要があります。

###4.タグの使用

タグはリポジトリのスナップショットであり、一般的に新しいバージョンのリリース前に現在のバージョンをマークするために使用されます

  1. タグの作成

git tag <name> コマンドは新しいタグを作成するために使用されます。デフォルトは HEAD です。commit id を指定することもできます;

git tag -a <tagname> -m "blablabla..." はタグ情報を指定できます;

git tag -s <tagname> -m "blablabla..." は PGP 署名タグを使用できます;

git tag コマンドはすべてのタグを確認できます。

  1. タグの操作

git push origin <tagname> コマンドはローカルタグをプッシュできます;

git push origin --tags コマンドはすべての未プッシュのローカルタグをプッシュできます;

git tag -d <tagname> コマンドはローカルタグを削除できます;

git push origin :refs/tags/<tagname> コマンドはリモートタグを削除できます。

###5.GitHub での fork

P.S. fork は Linux の Shell コマンド fork から取られたもので(現在のプロセスを複製し、得られた子プロセスは親プロセスに影響されない)、他人のプロジェクトリポジトリを自分の GitHub に転送するために使用されます。その後、相互に独立します

GitHub では、任意のオープンソースリポジトリを Fork できます;

Fork 後のリポジトリの読み書き権限を所有します;

公式リポジトリに pull request をプッシュしてコードを貢献できます。

###6.一般的なリモート操作

  1. リモートプロジェクトの取得 git clone git@github.com:ayqy/git-helloworld.git。現在のディレクトリ下にプロジェクトフォルダが作成されます

  2. オンライン修正、git pull origin master を通じてローカルに取得します

  3. ローカル修正、git push -u origin master を通じてアップロードして同期します(まず add-commit する必要があることに注意してください)

##四.一般的なコマンド

  • mkdir:XX (空のディレクトリ XX を作成します。XX はディレクトリ名を指します)

  • pwd:現在のディレクトリのパスを表示します。

  • cat XX:XX ファイルの内容を確認します

  • git init:現在のディレクトリを管理可能な git リポジトリに変換し、隠し.git ファイルを生成します。

  • git add XX:xx ファイルを一時的な保存領域に追加します。

  • git commit –m "XX":ファイルをコミットします –m の後ろは注釈です。

  • git status:リポジトリのステータスを確認します

  • git diff XX:XX ファイルがどの内容を変更したかを確認します

  • git log:履歴記録を確認します

  • git reset --hard HEAD^ または git reset --hard HEAD~:1 つ前のバージョンに後退します

    P.S. 100 バージョン前に後退したい場合、git reset --hard HEAD~100 を使用します

  • git reflog:履歴記録のバージョン id を確認します

  • git checkout -- XX:XX ファイルのワークスペースの変更をすべて取り消します。

  • git rm XX:XX ファイルを削除します

  • git remote add origin https://github.com/ayqy/test.git:リモートリポジトリを関連付けます

  • git push –u(初めては-u が必要、以降は不要) origin master:現在の master ブランチをリモートリポジトリにプッシュします

  • git clone https://github.com/ayqy/test.git:リモートリポジトリからクローンします

  • git checkout –b dev:dev ブランチを作成し、dev ブランチに切り替えます

  • git branch:現在すべてのブランチを確認します

  • git checkout master:master ブランチに切り替えます

  • git merge dev:現在のブランチ上で dev ブランチをマージします

  • git branch –d dev:dev ブランチを削除します

  • git branch name:ブランチを作成します

  • git stash:現在の作業を隠し、後で現場を回復して継続して作業します

  • git stash list:隠されたすべてのファイルリストを確認します

  • git stash apply:隠されたファイルを回復しますが、内容は削除しません

  • git stash drop:ファイルを削除します

  • git stash pop:ファイルを回復すると同時に、ファイルも削除します

  • git remote:リモートリポジトリの情報を確認します

  • git remote –v:リモートリポジトリの詳細情報を確認します

  • git push origin master:Git は master ブランチをリモートリポジトリに対応するリモートブランチにプッシュします

  • git push origin :branch-name:コロン前のスペースを減らしてはいけません。原理は空のブランチを server 上に push することで、そのブランチを削除するのと同じです

  • git push --force origin master:バージョンを後退する際に、ローカルの旧バージョンで最新バージョンを上書きしたい場合に使用します。新バージョンの log 記録を削除し、痕跡を残しません

##五.コマンド大全

###1.CREATE

  • 既存のリポジトリをクローン

    git clone ssh://user@domain.com/repo.git

  • 新しいローカルリポジトリを作成

    git init

###2.LOCAL CHANGES

  • ワークキングディレクトリの変更されたファイル

    git status

  • 追跡ファイルの変更

    git diff

  • すべての現在の次のコミットに追加

    git add .

  • の一部の変更を次のコミットに追加

    git add -p <file>

  • 追跡ファイルのすべてのローカル変更をコミット

    git commit -a

  • 以前にステージングされた変更をコミット

    git commit

  • 最後のコミットを変更 公開されたコミットを修正しないでください!

    git commit --amend

###3.COMMIT HISTORY

  • 最新から始まるすべてのコミットを表示

    git log

  • 特定のファイルの時間経過による変更を表示

    git log -p <file>

  • で誰がいつ何を変更したか

    git blame <file>

###4.BRANCHES & TAGS

  • すべての既存のブランチをリスト

    git branch -av

  • HEAD ブランチを切り替え

    git checkout <branch>

  • 現在の HEAD に基づいて新しいブランチを作成

    git branch <new-branch>

  • リモートブランチに基づいて新しい追跡ブランチを作成

    git checkout --track <remote/branch>

  • ローカルブランチを削除

    git branch -d <branch>

  • 現在のコミットにタグをマーク

    git tag <tag-name>

###5.UPDATE & PUBLISH

  • 現在設定されているすべてのリモートをリスト

    git remote -v

  • リモートに関する情報を表示

    git remote show <remote>

  • という名前の新しいリモートリポジトリを追加

    git remote add <shortname> <url>

  • からすべての変更をダウンロードしますが、HEAD に統合しない

    git fetch <remote>

  • 変更をダウンロードし、直接 HEAD にマージ/統合

    git pull <remote> <branch>

  • リモート上のローカル変更を公開

    git push <remote> <branch>

  • リモートのブランチを削除

    git branch -dr <remote/branch>

  • タグを公開

    git push --tags

###6.MERGE & REBASE

  • を現在の HEAD にマージ

    git merge <branch>

  • 現在の HEAD を にリベース 公開されたコミットをリベースしないでください!

    git rebase <branch>

  • リベースを中止

    git rebase --abort

  • 競合を解決した後、リベースを継続

    git rebase --continue

  • 設定されたマージツールを使用して競合を解決

    git mergetool

  • エディタを使用して手動で競合を解決し、(解決後)ファイルを解決済みとしてマーク

    git add <resolved-file>

    git rm <resolved-file>

###7.UNDO

  • ワークキングディレクトリのすべてのローカル変更を破棄

    git reset --hard HEAD

  • 特定のファイルのローカル変更を破棄

    git checkout HEAD <file>

  • コミットを元に戻す(反対の変更を持つ新しいコミットを生成することにより)

    git revert <commit>

  • HEAD ポインタを以前のコミットにリセット

    …その後すべての変更を破棄:git reset --hard <commit>

    …すべての変更を未ステージングの変更として保持:git reset <commit>

    …コミットされていないローカル変更を保持:git reset --keep <commit>

###参考資料

コメント

コメントはまだありません

コメントを書く