Gitの簡単な使い方を学ぶ
このブログは、以下の学習記事を参考に、gitの記録を学習するためだけのブログです。
1.
Gitチュートリアル by Xuefeng Liao
2.
Git 共通コマンドの説明
Git コマンドの説明
バージョン管理ツールに公開されているコマンドです。
1.
ギットプル
: 他のリポジトリ(リモートまたはローカル)からローカルにコードを更新する、など。
git pull origin master
は、オリジンレポジトリをローカルのmasterブランチに更新することです
2.
git add
これはコミットする前に行う必要があるステップで、例えば次のようになります。
git add app/model/user.rb
を追加します。
app/model/user.rb
ファイルをGitのインデックスに追加します。
3.
git rm
: 現在のワークスペースとインデックスからファイルを削除する、例.
git rm app/model/user.rb
4.
ギットコミット
: 変更を現在のワークスペースにコミットする、例.
git commit -m story #3, add user model
コミットするときは、-mでコミットメッセージを入力する必要があります。
5.
git push
: ローカルコミットからリモートリポジトリにコードを更新する、など。
git push origin
は、ローカルのコードを orgin というリモートリポジトリに更新します。
6.
ギットログ
: 履歴ログを表示する
7.
git リバート
: バージョン変更を取り消すには、特定のGitバージョン番号を指定する必要があります。例えば 'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20', Gitバージョン番号はハッシュとして生成されます。
Git特有のコマンドをいくつか紹介します。
8.
ギットブランチ
: ブランチの追加、削除、チェックなど。
git branch new_branch
は、現在の作業バージョンから new_branch という新しいブランチを作成します。
git branch -D new_branch
で、new_branch というブランチは強制的に削除されます。
git branch
はすべてのローカルブランチをリストアップします
9.
gitチェックアウト
: Gitのチェックアウトには2つの目的があります。ひとつは、異なるブランチを切り替えることで、たとえば
git checkout new_branch
は new_branch ブランチに切り替えます。もうひとつの機能はコードをリストアすることです。
git checkout app/model/user.rb
は user.rb ファイルを最後のコミットから更新し、コミットされていない内容もロールバックします。
10.
git リベース
: rebaseコマンドを実行すると、実際にCからGに分岐点が移動するので、CからGへの分岐としても機能することを、以下の2つの図を使って説明するとわかりやすいでしょう。
11.
ギットリセット
: 現在の作業ディレクトリを指定されたバージョン番号に完全にロールバックする。たとえば、以下のように A-G の 5 つのコミットがあり、C のバージョン番号が bbaf6fb5060b4875b18ff9ff637ce118256d6f20 であるとすると、次のように実行します。
git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20
すると結果は、A-Cの3つのコミットだけとなります。
12.
ギットスタッシュ
: 現在の未コミットの作業をGitワークスタックに保存し、時期が来たらそれを適用します。このコマンドの使い方を簡単に説明します。この後のヒントセクションで焦点を当てます。
13.
ギットコンフィグ
: このコマンドは、以下のような様々なGitの設定を追加・変更するために使用します。
git config branch.master.remote origin
このコマンドは、マスターのリモートリポジトリをオリジンリポジトリと呼ぶように設定します。後のヒントセクションで、このコマンドを使ってあなたのGitをユニークなものにするためにパーソナライズすることができます。
14.
gitタグ
: 特定のバージョンにタグを付けることができるので、複雑なバージョンハッシュを覚える必要がありません。たとえば
git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20
そうすれば、後でそのバージョンを見たいときに、ハッシュの代わりに revert_version タグを使用することができます。
Gitが簡単にローカルブランチを提供したり、その他の機能を提供できるのは、そのファイル保存メカニズムによるもので、Gitが定義したファイルシステムを使って、バージョン管理情報をコードルートにある.gitフォルダーに保存するようになっています。
$ ls .git/
branches COMMIT_EDITMSG config description HEAD hooks index info logs objects ORIG_HEAD refs
説明する必要のある重要なファイルとディレクトリがいくつかあります。HEADファイルはルートノードに関する情報を格納し、実際、ディレクトリ構造はツリー構造を表し、Gitはバージョン情報を格納するためにこのツリー構造を使い、それからHEADはルートを表します。refsディレクトリは現在のバージョンコントロール・ディレクトリへの様々な参照を格納します(参照はローカルおよびリモートで使う様々なツリーブランチを参照します)。heads, remotes, stash, tags という 4 つのサブディレクトリがあり、それぞれルート、リモートリポジトリ、Git スタック、タグの 4 つの異なる参照を保存します。参照をより明確に見るには、 'git show-ref' というコマンドを使います。logs ディレクトリは参照に応じたログ情報を保存します。したがって、GitはSVNのようにルートとサブディレクトリの両方に.svnディレクトリを持つのではなく、完全なバージョン管理情報を記録するためにコードのルートにこの一つの.gitディレクトリがあればよいのです。では、GitとSVNの違いを見てみましょう。
リポジトリの作成 git init
最初のステップは、適切な場所を選び、空のディレクトリを作成することです。
$ mkdir learngit
$ cd learngit
2番目のステップでは
git init
コマンドを使用して、このディレクトリをGitで管理可能なリポジトリにします。
$ git init
Initialized empty Git repository in /home/users/huangxue/learngit/.git/
使用方法
ls -ah
コマンドを実行すると
.git
ディレクトリ
リポジトリへのファイルの追加 git add + git commit
最初のステップでは、コマンド
git add
でファイルをリポジトリに追加するよう Git に指示します。
$ git add readme.txt
上記のコマンドを実行しても何も表示されませんが、これは正しいです。
$ git status
# On branch master
#
# Initial commit
# Initial commit
# Changes to be committed:
# (use "git rm --cached
... " to unstage)
#
# new file: readme.txt
#
2番目のステップでは、コマンド
git commit
のリポジトリにコミットするようGitに指示します。
$ git commit -m "wrote a readme file"
*** Please tell me who you are.
Run
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: empty ident name (for <huangxue@dl1.(none)>) not allowed
上記のエラーは、gitがユーザー情報を設定していない(ident名が空)ことを表しています。
解決方法 user.emailとuser.nameを設定するだけです。(その
参照
)
$git config --global user.name "cherie"
$git config --global user.email "[email protected]"
コミットを再実行する
$ git commit -m "wrote a readme file"
[master (root-commit) 50829b7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
ワークスペースの状態を表示する ギットステータス
readme.txtの内容を変更して、以下のように使用します。
git status
コマンドでワークスペースの状態を見ることができます。
$ vim readme.txt
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add
... " to update what will be committed)
# (use "git checkout --
... " to discard changes in working directory)
#
# modified: readme.txt
# modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
ワークスペースの変更点を表示する git diff
を見ることができます。
git status
を使うと、ファイルが変更されたことがわかります。
git diff
をクリックすると、変更点が表示されます。
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
++ Git is a distributed version control system.
Git is free software.
コミット履歴を見る ギットログ
使用方法
git log
コマンドを使用すると、最新から最も古いコミットログまで表示することができます。
$ git log
commit f8cd540b86cfb5b9b21a1a5bd0d2f20c56823b4f
Author: cherie <[email protected]>
Date: Thu Nov 2 07:54:01 2017 -0400
add distributed
commit 50829b77a3ae43df944bfbb8bd1f856b379d86d5
Author: cherie <[email protected]>
Date: Thu Nov 2 07:52:37 2017 -0400
wrote a readme file
もし、出力が目に余るようであれば、さらに
--pretty=oneline
パラメータ
$ git log --pretty=oneline
f8cd540b86cfb5b9b21a1a5bd0d2f20c56823b4f add distributed
50829b77a3ae43df944bfbb8bd1f856b379d86d5 wrote a readme file
バージョンのロールバック ギットリセット
まず、どのバージョンが現在のバージョンなのかを知る必要があり、Gitでは
HEAD
は現在のバージョンを示し、最新のコミットf8cd540b86cfb5b9b21a1a5bd0d2f20c56823b4f(私のコミットIDはあなたと確実に異なることに注意してください)、最終バージョンは
HEAD^
で、その前のバージョンは
HEAD^^
もちろん、100バージョンまでは100 ^と書く方が簡単なので、次のように書きます。
HEAD~100
.
さて、現在の "add distributed" のバージョンを以前の "wrote a readme file" のバージョンにロールバックするには、次のようにします。
git reset
コマンドを使用します。
$ git reset --hard HEAD^
HEAD is now at 50829b7 wrote a readme file
もし将来のバージョンに戻りたい場合は、そのバージョンのコミットID、例えば50829b...を見つける必要があります(完全なバージョン番号を書く必要はなく、最初の数桁だけ書けば、Gitは自動的にそれを見つけます)ので、回復バージョンを指定することができます。
$ git reset --hard f8cd540b
HEAD is now at f8cd540 add distributed
$ git log --pretty=oneline
f8cd540b86cfb5b9b21a1a5bd0d2f20c56823b4f add distributed
50829b77a3ae43df944bfbb8bd1f856b379d86d5 wrote a readme file
全ブランチの全アクションのログを表示 git reflog
Gitでは、常に後悔の念がつきまといます。というのは
$ git reset --hard HEAD^
Gitはコマンド
git reflog
を使用して、各コマンドのログを記録します。
$ git reflog
f8cd540 HEAD@{1}: reset: moving to f8cd540b
f8cd540 HEAD@{3}: reset: moving to HEAD^
f8cd540 HEAD@{5}: commit: add distributed
50829b7 HEAD@{6}: commit (initial): wrote a readme file
支店管理
<ブロッククオート
ブランチの表示: git branch
ブランチの作成: git branch
ブランチの切り替え:git checkout
ブランチの作成+切り替え:git checkout -b
あるブランチを現在のブランチにマージする: git merge
ブランチの削除: git branch -d
ブランチの作成 git checkout -b xxx
Create a dev branch and then switch to the dev branch: $ git checkout -b dev
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout
コマンドに加え
-b
パラメータは create と switch を表し、次の2つのコマンドに相当します。
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
次に
git branch
コマンドで現在のブランチを確認できます。
$ git branch
* dev
master
すべてのブランチをリストアップ gitブランチ
git branch
コマンドはすべてのブランチを一覧表示し、現在のブランチの前には * 印を付けます。
そして、devブランチで普通にコミットできるようになります。たとえば、readme.txtにCreating a new branch is quickという一行を加えて変更すればよいのです。
そしてコミットします。
$ git add readme.txt
$ git commit -m "branch test"
[dev 4aa1cab] branch test
1 file changed, 1 insertion(+)
ブランチの切り替え git checkout xxx
dev ブランチの作業が終わったので、master ブランチに戻りましょう。
$ git checkout master
Switched to branch 'master'
master ブランチに戻って readme.txt を見てみると、先ほど追加したものが消えています! なぜなら、このコミットは dev ブランチでのものであり、master ブランチのコミットポイントはこの時点では変わっていないからです。
ブランチのマージ git マージ
git merge
コマンドは、指定されたブランチを現在のブランチにマージするために使用されます。
$ git merge dev
Updating 1b1381f..4aa1cab
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
ブランチの削除 git マージ
$ git branch -d dev
Deleted branch dev (was 4aa1cab).
削除後、ブランチを見ると、masterブランチだけが残っています。
$ git branch
* master
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例