こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
Git-Svnの使い方を忘れてしまうので自分用のメモです。
目次
- GitSVNの使い方
- Gitの使い方
- 変更ファイルをステージングへ
- ステージングから取り消し
- 新規追加ファイルを完全に消す
- ローカル変更を戻す
- ローカルの変更退避
- コミット
- 新しいブランチを作りたい
- 作成したブランチを消したい
- 前回コミット修正(add忘れやコメント修正)
- 前回コミットの取り消し
- untracked fileの削除
- 複数のコミットをまとめる
- リモートに上げたい
- ログを見たい
- コミットする前に変更を見たい
- 差分を見たい
- Conflict時の解決
- マージしたい
- Checkout 本当は別コマンドに慣れたい
- git のバージョンを調べる
- gitのバージョンアップ
- SSH鍵生成(windows)
- gitで認証情報を保存しておく
- GitLFSの認証情報を保存しておく
- GitConfigのデフォルト保存場所
- error: cannot lock ref~~とエラーがでる
- 到達不能なコミットを削除
- .gitignoreを書かずにファイルを無視
- worktree
- submodule
- git mv
- git cherry-pick
- git pull --rebase
- git は大文字小文字を区別しない
- git ブランチ名変えたい
- まとめ
GitSVNの使い方
GitSVNの構築
SVNの構築をした後に
と入力する。
すでにコミットがある場合はでかすぎるて動かない場合があるので、
動かない時はコレを使う。
qiita.com
リポジトリを作ってからフェッチする方法もある。
GitSVNの更新
git svn rebase
でgit pullと同様の動作が行われるっぽい?
GitSVNでPush
git svn dcommit
でgit pushと同様の動作が行われるっぽい?
Gitの使い方
変更ファイルをステージングへ
git add
ステージングから取り消し
~git reset HEAD~ 古いコマンドなので辞める (ローカルに変更は残る)
git restore --staged (ローカルに変更は残る) これがいいはず
新規追加ファイルを完全に消す
ステージングに上げてない場合、rmコマンドで消すだけ。 (コマンドの場合は↓のuntracked fileについて書いてるのでみて)
ローカル変更を戻す
git checkoutもつかえるけども、もう使わないほうが良い
git restore hoge.txt
ローカルの変更退避
git stash
git worktreeとかいうのも使えるけど……。
コミット
git commit -m "~~~~"
コメントを別で上げる場合は、-m オプションはいらない。
新しいブランチを作りたい
-git checkout -b 作成するブランチ名- ←古いので辞める
git switch -c
作成したブランチを消したい
git branch -D
マージの状態に関わらず、指定したブランチを削除
前回コミット修正(add忘れやコメント修正)
(git addなどをしてから)
git commit --amend
コメントだけ修正したい場合
(git addなどをしてない状態で)
git commit --amend
git comment --amend -m "aaaa"
前回コミットの取り消し
間違ってaddしてコミットしちゃったとき
git reset --soft HEAD^
単一ファイルは
git reset hoge
untracked fileの削除
(ディレクトリも消すコマンドだし、消しちゃうと戻せないので要注意)
git clean -df もしくは rmコマンドで丁寧に消す。
複数のコミットをまとめる
(履歴も消えるので要注意)
git rebase -i HEAD~4
指定したコミットをまとめる。
上記の場合、Headを含む4つ。
pick →何もしない
fixup → 上のpickコミットにまとめる
squash → 上のpickコミットにまとめるコミットメッセージの統合も行う
リモートに上げたい
git push
新規ブランチの場合はブランチ名も書く
git push origin hoge
サーバー上のデータを書き換える時は -f
オプションを使うが、基本的に危険なので使わない!
ログを見たい
git log
コミットする前に変更を見たい
git status
差分を見たい
git diff xxxx..yyyyy
git diff head^..head
差分ファイル名前だけみたい
git diff head^..head --name-only
ステージングとの差分を見たい
git diff --staged
ステージング前に差分を見たい
git diff
Conflict時の解決
自身の変更を適用したい時
git checkout --ours ~~~~~~
相手の変更を適用したい時
git checkout --theirs ~~~~~~
完了したらgit addしてコミット
マージしたい
git merge xxxx
xxxx を現在のブランチにマージする
Checkout 本当は別コマンドに慣れたい
git のバージョンを調べる
git --version
gitのバージョンアップ
(windowsの場合)
2.13でコマンドが実装されてるはず……。
git update-git-for-windows
SSH鍵生成(windows)
GitBashあたりで開いて
mkdir ~/.ssh cd ~/.ssh ssh-keygen -t rsa -C 'hoge@mail.com' #keyを作成するか聞かれるのでEnter #パスフレーズを入力 #パスフレーズを再入力
すれば良い。
C:\Users\ユーザー名.ssh
あたりに保存されるはず……。
rsa.pubが公開鍵
gitで認証情報を保存しておく
credential.helperで保存しておける。
git config --global credential.helper wincred
で保存される。
wincredという補助ツールらしい?
Windowsの認証情報を保存しておくやつを利用する
git config --global credential.helper cache
→タイムアウトするまで使える。デフォでは15分?
GitLFSの認証情報を保存しておく
何か怒られたら?
eval `ssh-agent`
↑をしてから実行
GitConfigのデフォルト保存場所
C:¥Users¥[ユーザー名]¥.gitconfig
~/.gitconfig
error: cannot lock ref~~とエラーがでる
ローカルに到達不能な追跡ブランチがのこってる場合などにおこる。
次↓のコマンドを実行する
到達不能なコミットを削除
git remote prune origin
.gitignoreを書かずにファイルを無視
ローカルに自分だけのgitignoreを追加したいって思った時につかう
.git/info/
フォルダに exclude
ファイル(text形式)の追加
worktree
git worktree
作業ディレクトリの追加。
複数チェックアウトしたいときに使える。
git worktree add huga
で現在のブランチからチェックアウトされたhugaディレクトリにhugaブランチが生成される。
ただし、同じブランチを複数チェックアウトは基本できない。
git worktree add <チェックアウトするディレクトリ> <チェックアウトするブランチ名>
で既存ブランチ名を別途指定することも可能っぽい。
list → ワークツリーリストの表示
lock → 管理ファイルを削除されないようにする(?)
move → ワークツリーの場所移動(サブモジュールについては移動できないらしいので注意)
repair → move以外で移動したフォルダへ再接続
remove → ワークツリーのファイル削除と、ローカルリポジトリ上の管理情報の削除 (Pathを指定する)
submodule
gitリポジトリの中にもう一つリポジトリを持てる機能。
メインの方に差分をあげておくことも出来るし、サブモジュール側の方にプッシュすることもできるっぽい。
このサイトがわかりやすかった
git mv
git mv 移動前 移動先
サブモジュールとか意識した上でフォルダ移動してくれる
git cherry-pick
git cherry-pick <branch名>
git cherry-pick <コミットのハッシュ値>
git cherry-pick <コミットのハッシュ値>..<コミットのハッシュ値>
特定のコミットを取り込む処理
git pull --rebase
ブランチマージの代わりにリベース処理を行うというのもあり。
怖い人はマージで対応するのが吉。
ただし、コンフリクトして無くてもマージだと必ずマージログが残るというデメリットが有る。
git は大文字小文字を区別しない
gitはデフォルト設定でファイル名の大文字小文字を区別しないので区別するようにさせるためにはgitconfig設定が必要
git config core.ignorecase false
コレで区別するようになるらしい
↑しかし、コミット時にリモートファイルに重複して生成されてしまう
キャッシュから大文字ファイルを削除する必要がある
git rm --cached xxxxx
で削除
フォルダ名だった場合は-rfオプションが必要
git rm -rf --cached xxxxx
git ブランチ名変えたい
$ git branch -m OLD-BRANCH-NAME NEW-BRANCH-NAME
$ git fetch origin
$ git branch -u origin/NEW-BRANCH-NAME NEW-BRANCH-NAME
$ git remote set-head origin -a
これらでリモートブランチも変えられるらしい。
Githubならウェブ画面から変えられるっぽい
ローカルの場合は
git branch -m <古いブランチ名> <新しいブランチ名>
or
git branch -m <新しいブランチ名>
(変えたいブランチにいる場合は新しいブランチ名の指定だけでOK)
まとめ
とりあえず、思い浮かんだものだけ。
今後も詰まったら追加していきたい。