git
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
git [2019/11/25 16:26] – nullpon | git [2022/07/13 12:08] (現在) – [ブランチ作る場所間違った] 削除 nullpon | ||
---|---|---|---|
行 1: | 行 1: | ||
====== Git ====== | ====== Git ====== | ||
- | [[http:// | + | [[http:// |
* [[git: | * [[git: | ||
===== インストール ===== | ===== インストール ===== | ||
==== Debian系 ==== | ==== Debian系 ==== | ||
- | sudo aptitude | + | sudo apt install git |
==== MacOSX ==== | ==== MacOSX ==== | ||
行 13: | 行 13: | ||
またはbrewで | またはbrewで | ||
brew install git | brew install git | ||
- | ===== 個人でバージョン管理 | + | ===== 基本的な使い方 |
- | GitはSVNのようにサーバ上のリポジトリを必要としない。ワーキングディレクトリがGitのリポジトリになる。 | + | |
+ | gitリポジトリを作成 | ||
+ | |||
+ | mkdir my_project | ||
cd my_project | cd my_project | ||
git init | git init | ||
- | コミット対象(ステージ)に追加 | + | 変更したファイルをコミット時の状態に戻す |
- | git add ファイルorディレクトリのパス | + | |
+ | git restore < | ||
+ | |||
+ | ステージ(コミット対象)に追加 | ||
+ | |||
+ | git add < | ||
ステージに追加したファイルをステージから外す | ステージに追加したファイルをステージから外す | ||
- | git reset HEAD ファイルorディレクトリのパス | ||
- | コミット | + | git restore --staged < |
+ | |||
+ | ステージに追加したファイルをコミット | ||
git commit | git commit | ||
| | ||
- | 変更されたファイルを全部対象にしてコミット(新しく作成したファイルは対象にならないので個別にadd) | + | 変更したファイルをステージに上げずに直接コミット(新規ファイルは直接コミットできない) |
git commit -a | git commit -a | ||
- | + | ||
- | 最後にコミットしたバージョンに戻す(svnのrevert) | + | |
- | git checkout ファイルorディレクトリのパス | + | |
===== config ===== | ===== config ===== | ||
行 75: | 行 83: | ||
と書ける。 | と書ける。 | ||
- | ===== リポジトリの公開 ===== | ||
- | サーバ上に公開リポジトリを設置する。 | ||
- | |||
- | サーバ上の / | ||
- | $ git --bare init | ||
- | |||
- | hoge.gitが公開ディレクトリとなる。bareリポジトリはワーキングディレクトリとして使えない。 | ||
- | |||
- | 現在作業中のリポジトリからbareリポジトリを作成する場合は、以下のようにクローンを作成。 | ||
- | $ git --bare clone project project.git | ||
- | |||
- | 作成したbareリポジトリをサーバに設置し、以下のコマンドを実行 | ||
- | $ git update-server-info | ||
- | | ||
- | Webサーバ上の公開リポジトリからcloneやpullできる。 | ||
- | $ git clone http:// | ||
- | |||
- | pushしたいならssh経由でクローンするのが楽。 | ||
- | $ git clone ssh:// | ||
- | |||
- | pushされた内容はpushしただけではbareリポジトリに反映されない。pushする度にupdate-server-infoする必要がある。これをpush時に自動で実行するにはhoge.git/ | ||
===== push ===== | ===== push ===== | ||
行 232: | 行 219: | ||
$ git diff コミット名1 コミット名2 -- ファイル名 | $ git diff コミット名1 コミット名2 -- ファイル名 | ||
| | ||
- | ワーキングツリーではなくインデックスと比較する場合はcachedオプションを付ける。 | + | ステージに上げられたファイルの差分を表示 |
- | $ git diff --cached | + | $ git diff --staged |
+ | $ git diff --cached | ||
| | ||
スペース・タブの変更を無視してdiff結果を出す | スペース・タブの変更を無視してdiff結果を出す | ||
行 277: | 行 265: | ||
$ git log --committer=nullpon | $ git log --committer=nullpon | ||
- | ===== コミットを並び替える ===== | ||
- | $ git rebase -i HEAD~3 | ||
- | | ||
- | こんな画面が出てくる、 | ||
- | pick xxxxxxxx コミット1 | ||
- | pick xxxxxxxx コミット2 | ||
- | pick xxxxxxxx コミット3 | ||
- | | ||
- | コミット1が古い方。 | ||
- | pick xxxxxxxx コミット1 | ||
- | pick xxxxxxxx コミット3 | ||
- | pick xxxxxxxx コミット2 | ||
- | |||
- | コミット2と3を入れ替えて保存。 | ||
- | ===== 複数のコミットをまとめる ===== | ||
- | たとえば3つ前までのコミットを1つにまとめる(まとめる、というよりも新しいコミットを古いコミットに含めるというのが正しい) | ||
- | $ git rebase -i HEAD~3 | + | ===== 特定のファイルを過去の時点に戻す ===== |
- | + | ||
- | こんな画面が出てくる | + | |
- | pick xxxxxxxx コミット1 | + | `restore -s`を使う |
- | pick xxxxxxxx コミット2 | + | |
- | pick xxxxxxxx コミット3 | + | |
- | + | ||
- | コミット1が古い方。 | + | |
- | pick xxxxxxxx | + | 指定したファイルをコミット`aaaa`の変更前に戻す |
- | s xxxxxxxx コミット2 | + | |
- | s xxxxxxxx コミット3 | + | |
- | + | ||
- | コメント修正画面が出てくるので、適当にコメントを直して保存するとまとまる。止めたいときはコメント全部消して終了し、git rebase --abort | + | |
- | ===== ブランチ作る場所間違った ===== | + | git restore -s aaaa^ 戻したいファイルのパス |
+ | |||
+ | git rmされたファイルを復元するときも同様。 | ||
- | hotfix/aaa からブランチを作るべきなのに master から作ってコミットしまった… | ||
- | |||
- | git rebase --onto hotfix/aaa master | ||
===== bareリポジトリの同期 ===== | ===== bareリポジトリの同期 ===== | ||
行 325: | 行 286: | ||
git fetch -f origin ' | git fetch -f origin ' | ||
+ | ===== イベントフック ===== | ||
+ | |||
+ | pushの前にコードフォーマットチェックし、ダメな場合はpushを中止する | ||
+ | |||
+ | テンプレがあるのでコピー | ||
+ | |||
+ | <code shell> | ||
+ | cp .git/ | ||
+ | </ | ||
+ | |||
+ | .git/ | ||
+ | |||
+ | < | ||
+ | #!/bin/sh | ||
+ | |||
+ | remote=" | ||
+ | url=" | ||
+ | |||
+ | z40=0000000000000000000000000000000000000000 | ||
+ | |||
+ | while read local_ref local_sha remote_ref remote_sha | ||
+ | do | ||
+ | if [ " | ||
+ | then | ||
+ | # Handle delete | ||
+ | : | ||
+ | else | ||
+ | if [ " | ||
+ | then | ||
+ | # New branch, examine all commits | ||
+ | range=" | ||
+ | else | ||
+ | # Update to existing branch, examine new commits | ||
+ | range=" | ||
+ | fi | ||
+ | |||
+ | # Check for WIP commit | ||
+ | commit=`git rev-list -n 1 --grep ' | ||
+ | if [ -n " | ||
+ | then | ||
+ | echo >&2 "Found WIP commit in $local_ref, not pushing" | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | ## scalaの例、ここを追加! | ||
+ | sbt scalafmtCheck test: | ||
+ | status=$? | ||
+ | if [ $status -ne 0 ]; then | ||
+ | exit $status | ||
+ | fi | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | exit 0 | ||
+ | </ | ||
+ |
git.1574699217.txt.gz · 最終更新: 2019/11/25 16:26 by nullpon