-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_GitCommands
- わざわざ、Gitコマンドを使う ≒ Linux上での操作を想定
- 複雑な操作は、GitHub上で行う想定(マージはプルリクエスト(実体はマージリクエスト)で)。
- GitHubで認証を求められたら、https://github.com/settings/tokens で発行したトークンを指定する。
- 試してみたが、俯瞰性能の低いCUIは使い難い。編集中は最低限、git-guiを使った方が良さそう。
git --version
インストールされない場合はインストール
sudo apt update
sudo apt install git
Gitにあるリポジトリを操作
(testリポジトリのtestブランチ)
git clone https://github.com/daisukenishino2/test.git
cd test
-
既存
git switch test -
新規
git switch -c your-task
nano README.md
-
変更のあったファイルを確認
git status -
それぞれの差分を確認
git diff
ステージングに追加
-
ファイル指定
git add README.md -
すべてのファイル
git add . -
間違った場合(作業ディレクトリに何の変更も加えることなくステージエリアをreset)
git reset
※ 基本的に1ファイル1ファイル指定したほうが良さそう。
git commit -m "updated."
git pullコマンドはgit fetchコマンドとgit mergeコマンドを一括実行、必要に応じてコンフリクトを解決する。
git pull origin <branch>
pullしてpushすればコンフリクトはない。
git push origin <branch>
※ 任意の認証が必要になる。
git clone は既存の git repositoryのclone (コピー) を作成する
-
Git clone | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-basics#!clone- 既存の Git repositoryのコピーを作成する
- コピー元repositoryをポイントする origin という名称のremote接続を自動で作成。
- svn checkout と異なり、作業コピーがそれ自身で
- 完全な git repositoryを構成する。
- 履歴を持ってファイルを管理する。
-
command
-
local or remoteのrepositoryをcloneする。
git clone <repo> -
クローン先のdirectoryを指定してcloneする。
git clone <repo> <directory>
-
- Git remote | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/remote-repositories#!remote- 他のrepositoryとの接続の作成、内容確認、削除を行う
- 非短縮 URL への参照として使用可能な短縮名称として機能
remote repositoryからfetchする。
-
Git fetch | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/remote-repositories#!fetch- remote repositoryからlocal repositoryにbranchをインポートする。
- local branchとしてではなく、remote branchとして保存される。
- pullと異なりlocal repositoryにmergeする前に変更内容を確認できる。
-
command
-
remoteのすべてのbranchをfetchする。
git fetch <remote> -
remoteの特定のbranchをfetchする。
git fetch <remote> <branch>
-
remote repositoryからpull(fetch & merge)する。
-
Git pull | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/remote-repositories#!pull- git fetch commandとそれに続く git merge commandをひとつにまとめたcommand
-
command
-
現在のbranchにremote branchをfetchして即時merge
git pull <remote> -
remote branchを現在のbranchにmergeする際に git rebase commandを使用
git pull --rebase <remote>
-
remote repositoryへpushする。
-
Git push | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/remote-repositories#!push- local repositoryからremote repositoryにbranchをエクスポートする。
- localな変更の中央repositoryへの公開
- remote repository内で git merge master commandを実行する場合と同等
- push先は --bare フラグを指定して作成したrepositoryに限定するべき。
- local repositoryからremote repositoryにbranchをエクスポートする。
-
command
-
指定したbranchを
<remote>にpushするgit push <remote> <branch> -
すべてのlocal branchを指定したremote repositoryにpush
git push <remote> --all -
すべてのlocal tagをremote repositoryに送る
git push <remote> --tags
-
branchする
-
Git branch | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-branches#!branch- branch(独立な開発ライン)の作成
- 作業ディレクトリやステージングエリア、プロジェクト履歴を全く新しく作成する手段
-
command
-
現在のbranchから
<new-branch>をbranchする
「作成するだけで、切り替えはしない」 ので注意git branch <new-branch>
-
branchをcheckoutする(切り替える)。
-
Git checkout | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-branches#!checkout- branchを切り替える。
- HEADが移動することで、使用するbranchが変更される。
-
command
-
既存branch
<existing-branch>に切り替える。git checkout <existing-branch> -
新規branch
<new-branch>を作成して即時checkoutgit checkout -b <new-branch> -
既存branch
<existing-branch>から新規branch<new-branch>を作成して即時checkoutgit checkout -b <new-branch> <existing-branch>
-
branchをmergeする。
-
Git merge | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-branches#!merge- branch(分岐した履歴)を現在のbranchへ統合する手段
-
command
-
指定したbranchを現在のbranchにmergeする
git merge <branch> -
「早送り」可能であっても、常にmerge commitを作成してmerge
git merge --no-ff <branch>
-
-
参考
- merge commitとFast-forward merge - Qiita
http://qiita.com/shyamahira/items/59ff8aa1cf7b893aab60
- merge commitとFast-forward merge - Qiita
branchを削除する。
-
mergeされたbranchを削除する
git branch -d <experimental> -
mergeされたかどうかにかまわず削除する
git branch -D <experimental>
作業ディレクトリ内の変更をステージングエリアに追加
-
Git add | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-basics#!add- 個々のファイルの変更内容を次回commitの対象とすることを Git に指示。
- git commit を実行するまでは変更が実際に記録されない。
-
command
-
<file>に加えられたすべての変更をステージして次回のコミットの対象とする。git add <file> -
<directory>内のすべての変更をステージして次回のコミットの対象とする。git add <directory> -
インタラクティブなステージングセッションを開始する。
git add -p
-
作業ディレクトリから追跡対象外のファイルを削除する
-
Git clean | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/undoing-changes#!clean- 通常の rm コマンド同様 git clean コマンドも元に戻すことはできない。
-
command
-
git clean の「予行演習」を行うコマンドで削除されるファイルを表示する。
git clean -n -
追跡対象外のファイルをカレントディレクトリから削除する。
ただし、.gitignore で指定したファイルは削除しない。git clean -f -
追跡対象外のファイルを指定したパスから削除する。
git clean -f <path> -
追跡対象外のファイルとディレクトリをカレントディレクトリから削除する。
git clean -df -
追跡対象外ファイルと通常無視されるファイルをカレントディレクトリから削除する。
git clean -xf
-
ステージングエリアをリセットする(ワーキングツリーは変更されない)。
-
Git reset | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/undoing-changes#!reset -
command
-
作業ディレクトリに変更も加えずに、指定したファイルをステージングエリアから削除する
git reset <file> -
作業ディレクトリに何の変更も加えることなくステージエリアをresetして直前のcommit時の状態と一致させる
git reset -
ステージエリアと作業ディレクトリをresetして直前のcommit時の状態と一致させる
git reset --hard
-
<commit> = commit の"SHA-1 id"
変更のcommit
-
Git commit | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-basics#!commit- ステージされたスナップショットを取り込んでlocal repositoryにcommitする。
- スナップショットは常にlocal repositoryにcommitされ、他のrepositoryには影響を与えない。
-
command
-
ステージされたスナップショットをcommit。
git commit -
commit メッセージ付きでcommit。
git commit -m "<message>"
-
履歴を完全に戻したい(かつ単独作業中)
-
Git reset | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/undoing-changes#!reset- commit済みのスナップショットを削除する目的でも使用される。
- git revert コマンドは変更を元に戻す「安全な」方法
- コレに対し、git reset コマンドは変更を元に戻す「危険な」方法。
- 復元方法が無いため、ローカルな変更を元に戻す場合に限るべき。
-
command
-
現在のbranchの先端を
<commit>の位置に戻した上でステージングエリアをその状態と一致するように元に戻すが、作業ディレクトリのみはそのままにしておく。
これにより、変更規模が小さく整理されたスナップショットを作成してlocal repositoryへ再commitできる。git reset <commit> -
現在のbranchの先端を
<commit>の位置に戻した上でステージングエリアおよび作業ディレクトリをその状態と一致するように元に戻す。
commit前の変更に加えて<commit>の後に行われたすべてのcommitも全くなかったものとなる。git reset --hard <commit>
-
指定したコミットを「打ち消す」新しいコミットを作る(履歴を保持しながら変更を戻す)。
-
Git revert | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/undoing-changes#!revert- 履歴を保全し、履歴の完全性とコラボレーションの信頼性を維持・確保する。
- commitがなかったものとするのではなくそのcommitによって加えられた変更を元に戻す方法を見出してその結果を新しいcommitとして追加する。
-
command
-
特定のcommitのrevert
git revert <commit>
-
branchの確認
-
Git branch | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-branches#!branch- 一覧表示
-
command
-
local branchの確認
git branch -
remote追跡branchを表示
git branch -r -
local branchとremote追跡branchの両方のbranchを表示
git branch -a -
名称の変更
git branch -m <branch>
-
statusの確認
-
Git status | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-basics#!status- 作業ディレクトリとステージングエリア(ステージされたスナップショット)の状態を確認
- ステージされた変更内容、
- ステージされていない変更内容
- Git による追跡の対象外となっているファイル
- 作業ディレクトリとステージングエリア(ステージされたスナップショット)の状態を確認
-
command
-
ステージされたファイル、されていないファイル、追跡対象外のファイルを一覧表示。
git status
-
logの確認
-
Git log | アトラシアン Git チュートリアル
https://www.atlassian.com/ja/git/tutorial/git-basics#!log- commit済みのスナップショットを表示するcommand
- commit済みの履歴 (commit履歴) のみが対象
- commit済み変更履歴の一覧表示
- それに対するフィルター処理
- 特定の変更内容の検索
-
command
-
commit履歴全体をデフォルトの形式で表示
git log -
表示するcommit数を
<limit>に制限する。git log -n <limit> -
commit履歴を概観する(各々のcommitの内容を1行に圧縮して表示)
git log --oneline -
改変されたファイルおよびその中での追加行数と削除行数を増減数で表示
git log --stat -
各々のcommitに対応するパッチ(commitの完全な差分情報)を表示します。
git log -p
-
Rebase、Reset、Revert の違いと使い分け
「履歴を綺麗にしたい」場合に使う(ローカルでのみ行うべき)
- ブランチの基点(親コミット)を変更することで、履歴を整理
- ブランチを最新の
mainブランチに追従させる(mainの最新の状態に適用し直す)。
https://www.google.com/search?q=Rebase&udm=2
- 履歴を書き換えるため、リモートにプッシュしたコミットに対しては使わない。
- 既にリモートにpushしたコミットの履歴をrebaseで書き換えた後、push --forceすると結果として、チームの開発効率が低下する。
- 他の開発者のローカル履歴とリモートの履歴が不一致になり、何が起こったのか分からず、他の開発者が混乱する。
- リモートの意図しない履歴を書き換える可能性があり、また、他の開発者のコミットが消える可能性がある。
「間違えてコミットした」場合に使う(ローカルでのみ行うべき)
- 指定したコミットに対して、現在のブランチを強制的に戻すコマンド。
- 履歴を巻き戻すとともに、ワーキングツリーやインデックスの状態をどうするかによって、3つのモードがある。
| モード |
git reset <commit> の影響 |
|---|---|
--soft |
コミット履歴だけ戻し、インデックスやワーキングツリーの変更はそのまま残る |
--mixed(デフォルト) |
コミットとインデックスは戻るが、ワーキングツリーの変更は残る |
--hard |
コミット、インデックス、ワーキングツリーすべてを戻す(変更が完全に消える) |
-
--hardを使うと 変更が完全に消える ので、慎重に使うこと。 - リモートにプッシュ済みの履歴を変更すると他の開発者に影響を与える。
「リモートに影響を与えずに変更を取り消したい」(安全なので推奨される)場合に使う
- 履歴を維持しながら特定のコミットの変更を取り消すため、リモートリポジトリに影響を与えずに修正できる。
- 指定したコミットを打ち消す「新しいコミット」を作成するコマンド。
- 履歴を改変せずに変更を取り消すことができるため、安全な方法。
- 履歴が残るため、リセットのように「なかったこと」にはならない。
- 逆順にrevert(打ち消す「新しいコミット」)してもコンフリクトが発生する場合がある。
| コマンド | 目的 | 履歴の改変 | 影響範囲 |
|---|---|---|---|
| rebase | 履歴を整理・ブランチを最新にする | する | ローカルのみ(要 push --force) |
| reset | コミットを取り消す・巻き戻す | する | ローカルのみ(特に --hard に注意) |
| revert | 特定のコミットを打ち消す | しない | リモートでも安全 |
移行メモ
- 「git commit を実行するまでは変更がは実際に記録されない。」→ 「変更が実際に記録されない。」に修正した。
- 「.gitignore. で指定したファイル」→「.gitignore で指定したファイル」に修正した。
- 「ブランチを最新の
mainブランチに追従させる(の最新の状態に適用し直す。)」は 括弧内の主語が欠落していたため「(mainの最新の状態に適用し直す)。」とした。- 元 Wiki で HTML 実体参照(
<commit>)で書かれていた箇所は`<commit>`に戻した。- 同名の見出し(「インストール」「clone」「開発」「確認」「branch」 「ステージング」「commit」「概要」「注意点」)が複数あり GitHub Wiki でアンカが衝突するため、括弧で文脈を補って一意にした。 なお元 Wiki でも「git reset」と「git reset --hard」の見出しに 同じアンカ(
#y5c171a9)が振られていた。
Tags: 移行, Git, Gitコマンド, clone, branch, merge, rebase, reset, revert, ステージング
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。