内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
git
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== Git ====== [[http://git-scm.com/|Git]]は、フリーでオープンソースのバージョンコントロールシステム。Linuxのカーネル開発のためにLinus Torvaldsによって開発された。 * [[git:publishing|Gitで公開]] ===== インストール ===== ==== Debian系 ==== sudo apt install git ==== MacOSX ==== Xcodeをインストールし、コマンドラインツールをインストールするとgitもインストールされる xcode-select --install またはbrewで brew install git ===== 基本的な使い方 ===== gitリポジトリを作成 mkdir my_project cd my_project git init 変更したファイルをコミット時の状態に戻す git restore <path/to/target> ステージ(コミット対象)に追加 git add <path/to/target> ステージに追加したファイルをステージから外す git restore --staged <path/to/target> ステージに追加したファイルをコミット git commit 変更したファイルをステージに上げずに直接コミット(新規ファイルは直接コミットできない) git commit -a ===== config ===== 現在のリポジトリの設定を見る git config -l ==== コミッタ名の変更 ==== コミッタ名とメールアドレスを設定(これがデフォルト値になる) git config --global user.name nullpon git config --global user.email nullpon@example.com 今いるリポジトリでデフォルト設定を上書きしたい場合 git config user.name nullpon git config user.email nullpon@example.com ==== リモートリポジトリを追加する ==== クローンした場合は自動的にクローン元がoriginという名前でリモートリポジトリとして登録されている。 githubを登録(ローカルで先に開発を始め、後からgithubのリポジトリを作った場合) $ git remote add origin https://github.com/paulownia/test SSHサーバを登録(SSHサーバは公開鍵認証にすべき) $ git remote add origin ssh://repo.paulownia.jp/git/test $ git remote add origin ssh://nullpon@repo.paulownia.jp:2222/git/test SSHのconfigに別名でHostを登録していれば… <code> Host repo User nullpon HostName repo.paulownia.jp Port 2222 IdentityFile ~/.ssh/id_rsa PubkeyAuthentication yes </code> $ git remote add origin repo:/git/test と書ける。 ===== push ===== bareリポジトリをクローンする $ git clone ssh://nullpon@paulownia.jp/var/git/repo/hoge.git ローカルのリポジトリにコミット $ git add lib/hoge.rb $ git commit ローカルのコミットをリモートのリポジトリに送信(push)するには $ git push ssh://nullpon@paulownia.jp/var/git/repo/hoge.git master:master $ git push (pushするリモートリポジトリ) (自分のブランチ):(push先のブランチ) リポジトリのURLは clone したときにoriginという名前が付いているので、originと書くことができる。 $ git push origin master:master ローカルブランチとリモートブランチの名前が同じならば省略できる $ git push origin master ===== リモートの変更を取り込む ===== リモートリポジトリoriginのmasterのコミットを、ローカルにチェックアウト中のブランチに取り込む $ git pull origin master これは以下の作業と同じ $ git fetch origin master $ git merge FETCH_HEAD ===== リモートのブランチをローカルに作成 ===== 普通にcloneするとmasterブランチしかコピーされない。ブランチも取得したい場合はローカルに同じ名前のブランチを作り、そこにリモートのブランチをマージするという手順で作成する まずリモートのブランチを確認 $ git branch -r origin/HEAD -> origin/master origin/master origin/hogehoge 普通にチェックアウトするとリモートからブランチを取得してチェックアウトされる。 $ git checkout hogehoge 上記のコマンドでだめな時は $ git checkout -b hogehoge origin/hogehoge または、ブランチ名を完全に指定してfetchし、checkout $ git fetch origin hogehoge:hogehoge $ git checkout hogehoge ===== ブランチ ===== ブランチ一覧を見る git branch リモートブランチ一覧 git branch -r originで削除されているリモートブランチを掃除する git remote prune origin 今のブランチにマージ済みのブランチ一覧 git branch --merged ブランチ切り替え git switch ブランチ名 新しいブランチを作成して切り替え git switch -c ブランチ名 ブランチの削除 git branch -d ブランチ名 (--mergedでリストされないブランチは削除されない) git branch -D ブランチ名 (--mergedでリストされないブランチも強制削除) ブランチの名前変更 git branch -m hoge fuga マージの仕方(ブランチhogeをmasterにマージ) git switch master git diff hoge (差分の確認) git merge hoge git merge --no-commit hoge(コミットせずに作業領域にマージする) git merge --squash hoge(ブランチの変更を1つのコミットとしてマージする) checkoutサブコマンドはローカルの変更を取り消してリポジトリの最新バージョンに戻す(svnのrevertに相当する)機能もある。仮にブランチ名と同じファイルがあるとブランチ変更が優先される。その場合でファイルを戻したい時は git checkout -- 変更したファイル git checkout ./変更したファイル とする。 ===== コミットのやり直し ===== コミットのやり直しは自分の手元のリポジトリのみにすべきで、みんながpull、pushするために作成したリポジトリで行うべきではない。 ==== コミット漏れファイルを追加 ==== addし忘れて、コミット対象からファイルが漏れていた場合、 $ git add 忘れたファイル $ git commit --amend 入れ忘れたファイルがHEADのリビジョンに追加される。 ==== コミット取消し ==== 最後のコミットを取り消す。ワーキングツリーはそのまま $ git reset --soft HEAD^ 最後のコミットを取り消し、ワーキングツリーも戻したコミットの状態にする。 $ git reset --hard HEAD^ コマンドの意味は「コミットを取り消す」ではなく「HEAD^ (=1つ前のコミット) にリセットする」という意味。HEAD^ はHEADの1つ前、HEAD^^は2つ前という意味である。また HEAD~2 も2つ前を示す。したがって、以下のコマンドで2つ前のコミットがリポジトリの最新バージョンとなる(ラスト2つのコミットを取り消す) $ git reset --soft HEAD^^ $ git reset --soft HEAD~2 ===== 差分の確認(git diff) ===== $ git diff オプション コミット名1 コミット名2 -- ファイル名 コミット名の指定方法は、 HEAD^^ HEAD~2 のようなHEADからの相対指定、またはハッシュ値による絶対指定のいずれか。 * コミット名2 を省略すると、コミット名1とワーキングツリーの比較 * コミット名1 と コミット名2 の両方を省略すると、HEADとワーキングツリーの比較 例 $ git diff $ git diff -- ファイル名 $ git diff ファイル名 # ファイル名と自明の場合は -- 無しでも良い $ git diff コミット名1 $ git diff コミット名1 -- ファイル名 $ git diff コミット名1 -- ファイル名 $ git diff コミット名1 コミット名2 -- ファイル名 ステージに上げられたファイルの差分を表示 $ git diff --staged $ git diff --cached スペース・タブの変更を無視してdiff結果を出す $ git diff -b 差分の前後のみでなく、ファイル全体を表示 $ git diff -W 変更のあるファイル名のみ表示する場合は、name-onlyオプションを付ける $ git diff --name-only statを表示 $ git diff --stat ===== コミットログの確認 ===== $ git log 5つ前までのログ $ git log -5 $ git log -n 5 差分も表示 $ git log -p 変更されたファイル名と変更された行数などを表示 $ git log --stat 変更されたファイル名を表示 $ git log --name-status 指定ファイルのログを表示、ファイル名が他の意味を持ってしまう場合は -- を使ってファイルであることを示す $ git log filename $ git log -- filename ユーザでフィルタリング(正規表現使用可能) $ git log --author=nullpon $ git log --committer=nullpon ===== 特定のファイルを過去の時点に戻す ===== `restore -s`を使う 指定したファイルをコミット`aaaa`の変更前に戻す git restore -s aaaa^ 戻したいファイルのパス git rmされたファイルを復元するときも同様。 ===== bareリポジトリの同期 ===== bareリポジトリのoriginに強制的に同期させる(origin側のrebaseに追従させる) git fetch -f origin 'refs/heads/*:refs/heads/*' ===== イベントフック ===== pushの前にコードフォーマットチェックし、ダメな場合はpushを中止する テンプレがあるのでコピー <code shell> cp .git/hook/pre-push.sample .git/hook/pre-push </code> .git/hook/pre-pushを以下のように変更 <code> #!/bin/sh remote="$1" url="$2" z40=0000000000000000000000000000000000000000 while read local_ref local_sha remote_ref remote_sha do if [ "$local_sha" = $z40 ] then # Handle delete : else if [ "$remote_sha" = $z40 ] then # New branch, examine all commits range="$local_sha" else # Update to existing branch, examine new commits range="$remote_sha..$local_sha" fi # Check for WIP commit commit=`git rev-list -n 1 --grep '^WIP' "$range"` if [ -n "$commit" ] then echo >&2 "Found WIP commit in $local_ref, not pushing" exit 1 fi ## scalaの例、ここを追加! sbt scalafmtCheck test:scalafmtCheck scalafmtSbtCheck status=$? if [ $status -ne 0 ]; then exit $status fi fi done exit 0 </code>
git.txt
· 最終更新: 2022/07/13 12:08 by
nullpon
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ