Gitに関しても過去記事まとめしていきます。
Contents
Git入門
Gitの入手とインストール
Windows
後日更新予定です。
Linux(Debian)
後日更新予定です。
Mac
後日更新予定です。
Gitバージョン確認
定番の–versionで確認できます。
takk~$ git --version git version 2.20.1 takk~$
Gitレポジトリ作成
Git レポジトリの作成
ものすごく簡単です。ディレクトリを作成し、git initをするだけです。
tmp/repos/workというディレクトリを作成して、それをレポジトリにしたいと思います。
takk~$ mkdir -p tmp/repos/work takk~$ cd !$ cd tmp/repos/work takk~/tmp/repos/work$
これでレポジトリ用のディレクトリが作成できました。
次は今作成したディレクトリをレポジトリにしてみます。
takk~/tmp/repos/work$ git init Initialized empty Git repository in /home/takk/tmp/repos/work/.git/ takk~/tmp/repos/work$ ls takk~/tmp/repos/work$
これだけです。
空のGitレポジトリを初期化しましたっていうメッセージが表示されましたね。
lsしても何も出てこないのは、管理ファイルが隠しファイルだからです。ls -aで確認してみます。
takk~/tmp/repos/work$ ls -a . .. .git takk~/tmp/repos/work$
できてますね。試しに何かファイルを追加してコミットしてみます。
takk~/tmp/repos/work$ echo AAA > file1.txt takk~/tmp/repos/work$ git add file1.txt takk~/tmp/repos/work$ git commit -m "first commit" [master (root-commit) 084f6f8] first commit 1 file changed, 1 insertion(+) create mode 100644 file1.txt takk~/tmp/repos/work$ git log --oneline 084f6f8 (HEAD -> master) first commit takk~/tmp/repos/work$
コミットもできて、ログの確認もできました。
Git ベアレポジトリの作成
次は、ベアレポジトリ(Bare Repository)を作成してみます。さきほどのディレクトリは一旦削除して最初から作成です。
takk~$ cd takk~$ rm -rf tmp takk~$ ls takk~$ mkdir -p tmp/repos/work takk~$ cd !$ cd tmp/repos/work takk~/tmp/repos/work$
ではベアレポジトリを作ります。–bareオプションを指定するだけです。
takk~/tmp/repos/work$ git init --bare Initialized empty Git repository in /home/takk/tmp/repos/work/ takk~/tmp/repos/work$
ホームのtmp/repos/workが、ベアレポジトリになりました。
ls -aで管理ディレクトリを確認してみます。
takk~/tmp/repos/work/tmp/repos/work$ ls -a . .. branches config description HEAD hooks info objects refs takk~/tmp/repos/work/tmp/repos/work$
あれ、今度は.gitディレクトリじゃありませんね。
ベアレポジトリは、実際にファイルの追加、コミットといったバージョン管理する作業場ではなく、レポジトリしかないベア(裸)なレポジトリなので、本当の管理でディレクトリしか存在しません。
じゃあどうやって使うのかというと、クローンして使います。
また、–bareをつけないレポジトリと、–bareを付けて作成したベアレポジトリは、両方とも外から見るとディレクトリなので、区別つきません。
なので分かりやすくベアレポジトリの方は、ディレクトリ名に.gitとつけるのが通例のようです。
git clone レポジトリのクローン作成
では、さきほど作ったベアレポジトリのURLを指定してクローンのレポジトリを作成してみます。
takk~/tmp/repos/work$ cd ~/tmp takk~/tmp$ mkdir A takk~/tmp$ cd A takk~/tmp/A$ git clone file:///home/takk/tmp/repos/work Cloning into 'work'... warning: You appear to have cloned an empty repository. Checking connectivity... done. takk~/tmp/A$ ls work takk~/tmp/A$
ではworkの中を見てみましょう。
takk~/tmp/A$ cd work takk~/tmp/A/work$ ls takk~/tmp/A/work$
空ですね。実は隠しフォルダが存在します。
takk~/tmp/A/work$ ls -a . .. .git takk~/tmp/A/work$
この.gitディレクトリがあるディレクトリが、クローンされたレポジトリです。
このディレクトリの中で、ファイルやディレクトリを作って、コミットして、バージョン管理していきます。
最初にユーザ名とメールアドレスの設定をしましょう。現在のgitのコンフィグを確認。
takk~/tmp/A/work$ git config --list core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true remote.origin.url=file:///home/takk/tmp/repos/work remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.master.remote=origin branch.master.merge=refs/heads/master takk~/tmp/A/work$
ユーザ名とメールアドレスを設定します。
takk~/tmp/A/work$ git config --global user.name "takk" takk~/tmp/A/work$ git config --global user.email "takk@xxxxxxxx.xxx.xxx" takk~/tmp/A/work$
設定されたコンフィグを確認してみます。
takk~/tmp/A/work$ git config --list | grep user user.name=takk user.email=takk@xxxxxxxx.xxx.xxx takk~/tmp/A/work$
ばっちりです。
では、gitコマンドを使ってみます。
takk~/tmp/A/work$ git status On branch master No commits yet nothing to commit (create/copy files and use "git add" to track) takk~/tmp/A/work$
まだコミットがありません。そして「On branch master」は、現在のブランチがmasterであること示しています。
新しいレポジトリを作ってクローンしたとき、カレントブランチとして必ずmasterになっています。
branchコマンドでも確認してみます。branchコマンドは新しくブランチを作ったり、削除したり、ブランチのリストを表示してくれるコマンドです。
引数をつけないとブランチのリストを表示します。
takk~/tmp/A/work$ git branch takk~/tmp/A/work$
何も表示されませんね。そうなんです。何かファイルをコミットするまでリスト表示されません。
では、ファイルを作ってみましょう。
takk~/tmp/A/work$ echo HELLO > file1.txt takk~/tmp/A/work$ git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) file1.txt nothing added to commit but untracked files present (use "git add" to track) takk~/tmp/A/work$
作ったばかりのファイルは、Untracked fileとなっており、管理外のファイルです。
このファイルをGit管理下にしてみましょう。git addを使います。
takk~/tmp/A/work$ git add file1.txt takk~/tmp/A/work$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: file1.txt takk~/tmp/A/work$
ではコミットします。
takk~/tmp/A/work$ git commit -m "first commit" [master (root-commit) d4b39ba] first commit 1 file changed, 1 insertion(+) create mode 100644 file1.txt takk~/tmp/A/work$
git branchはどうなってでしょうか。
takk~/tmp/A/work$ git branch * master takk~/tmp/A/work$
masterと表示されました。コミットログも表示してみましょう。
takk~/tmp/A/work$ git log commit 4fc174dea3712dcd0ac64d6a36e2f88857a82bc9 (HEAD -> master) Author: takk <takk@xxxxxxxx.xxx.xxx> Date: Wed Apr 8 23:20:09 2020 +0900 first commit takk~/tmp/A/work$
さきほど-mオプションで書いたログが表示されました。ちゃんとユーザ名とメールアドレスもありますね。
git commit コミット
さきほどはレポジトリを作成し、初回のコミットを済ませました。
再度ファイルを修正してコミットしてみます。
takk~/tmp/A/work$ cat file1.txt HELLO takk~/tmp/A/work$ echo SEE YOU >> file1.txt takk~/tmp/A/work$ cat file1.txt HELLO SEE YOU takk~/tmp/A/work$
ファイルの修正をしました。git statusを確認してみます。
takk~/tmp/A/work$ git status On branch master Your branch is based on 'origin/master', but the upstream is gone. (use "git branch --unset-upstream" to fixup) Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: file1.txt no changes added to commit (use "git add" and/or "git commit -a") takk~/tmp/A/work$
ファイルが修正されていることを示す、「modifiled」が表示されています。
次に、この修正ファイルをステージします。ステージすると指定したファイルをコミットする準備ができます。
takk~/tmp/A/work$ git add file1.txt takk~/tmp/A/work$ git status On branch master Your branch is based on 'origin/master', but the upstream is gone. (use "git branch --unset-upstream" to fixup) Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: file1.txt takk~/tmp/A/work$
ではコミットします。
takk~/tmp/A/work$ git commit -m "second commit" [master 0c17b0d] second commit 1 file changed, 1 insertion(+) takk~/tmp/A/work$
ログを確認してみましょう。
takk~/tmp/A/work$ git log commit 0c17b0d36e71a89298bd1d46575d0ab3ff2be8dc (HEAD -> master) Author: takk <takk@xxxxxxxx.xxx.xxx> Date: Wed Apr 8 23:36:19 2020 +0900 second commit commit 4fc174dea3712dcd0ac64d6a36e2f88857a82bc9 Author: takk <takk@xxxxxxxx.xxx.xxx> Date: Wed Apr 8 23:20:09 2020 +0900 first commit takk~/tmp/A/work$
git branch ブランチ作成
git branchでブランチを作成できます。
ブランチを作ってみます。
takk~/tmp/A/work$ git branch b-1 takk~/tmp/A/work$
これでb-1ブランチができました。
確認してみましょう。引数をつけずにgit branchを使えば、ブランチのリストが表示されます。
takk~/tmp/A/work$ git branch b-1 * master takk~/tmp/A/work$
b-1と、masterがあり、masterに *がついています。
*は、カレントブランチを表します。
git checkout ブランチ変更
git checkoutで、カレントブランチが変更できます。
さきほど作ったb-1ブランチに変更してみます。
takk~/tmp/A/work$ git checkout b-1 Switched to branch 'b-1' takk~/tmp/A/work$ git branch * b-1 master takk~/tmp/A/work$
ではこのブランチでファイルを修正し、コミットしてみます。
takk~/tmp/A/work$ cat file1.txt HELLO SEE YOU takk~/tmp/A/work$ echo 12345 >> file1.txt takk~/tmp/A/work$ git add file1.txt takk~/tmp/A/work$ git commit -m "3rd commit" [b-1 c3f7bc5] 3rd commit 1 file changed, 1 insertion(+) takk~/tmp/A/work$
logを確認します。–onelineオプションで短いログを確認しましょう。
takk~/tmp/A/work$ git log --oneline c3f7bc5 (HEAD -> b-1) 3rd commit 0c17b0d (master) second commit 4fc174d first commit takk~/tmp/A/work$
ログを見ると分かりますが、「3rd commit」のみ、b-1ブランチでコミットされています。
ブランチをmasterに戻してみます。
takk~/tmp/A/work$ git checkout master Switched to branch 'master' Your branch is based on 'origin/master', but the upstream is gone. (use "git branch --unset-upstream" to fixup) takk~/tmp/A/work$
ログも見てみましょう。
takk~/tmp/A/work$ git log --oneline 0c17b0d (HEAD -> master) second commit 4fc174d first commit takk~/tmp/A/work$
masterにはコミットしていないので、「3rd commit」がありませんね。
git diff 修正差分を見る
ファイル修正していないときに、git diffを使うと、
takk~/tmp/A/work$ git diff takk~/tmp/A/work$
何も表示されません。
ファイル修正してみます。
takk~/tmp/A/work$ cat file1.txt HELLO SEE YOU takk~/tmp/A/work$ echo GOOD NIGIT >> file1.txt takk~/tmp/A/work$
もう一度git diff。
takk~/tmp/A/work$ git diff diff --git a/file1.txt b/file1.txt index 596219a..1bf565f 100644 --- a/file1.txt +++ b/file1.txt @@ -1,2 +1,3 @@ HELLO SEE YOU +GOOD NIGIT takk~/tmp/A/work$
コミットされている最新ファイルの内容と、さきほど修正したファイルの内容が比較され、
差分が表示されました。
+(プラス)の記号がついている行が、追加された行です。
Git 修正ファイルを元に戻す
修正したファイルを元に戻してみます。
git diffで修正内容を確認。
takk~/tmp/A/work$ git diff diff --git a/file1.txt b/file1.txt index 596219a..1bf565f 100644 --- a/file1.txt +++ b/file1.txt @@ -1,2 +1,3 @@ HELLO SEE YOU +GOOD NIGIT takk~/tmp/A/work$
ではgit checkoutを使って元に戻します。
takk~/tmp/A/work$ git checkout file1.txt takk~/tmp/A/work$
これで戻りました。git diffを実行してみます。
takk~/tmp/A/work$ git diff takk~/tmp/A/work$
git reset ステージの取り消し(addの取り消し)
ファイル修正、addしてみます。
takk~/tmp/A/work$ echo BBB >> file1.txt takk~/tmp/A/work$ git add file1.txt takk~/tmp/A/work$
ステージしたファイルは、git diffで差分は表示されません。
takk~/tmp/A/work$ git diff takk~/tmp/A/work$
git resetしてみます。
takk~/tmp/A/work$ git reset Unstaged changes after reset: M file1.txt takk~/tmp/A/work$
この後に、git diffを見ると、
takk~/tmp/A/work$ git diff diff --git a/file1.txt b/file1.txt index 596219a..0af9364 100644 --- a/file1.txt +++ b/file1.txt @@ -1,2 +1,3 @@ HELLO SEE YOU +BBB takk~/tmp/A/work$
add前に戻りました。
この状態からgit checkoutでファイル名を指定すると、修正前に戻ります。
コメント