YAMADA TAISHI’s diary

ゲームについてとか私の日記とか。このブログのあらゆるコードは好きにどうぞ。利用規約があるものは記事内のGitHubのRepositoryのリンクで貼られていると思うので、そちらを参照ください。

【自分用】Git,Git-Svnの使い方

こんにちは、やまだたいし( やまだ たいし (@OrotiYamatano) / Twitter )です。
Git-Svnの使い方を忘れてしまうので自分用のメモです。

目次


GitSVNの使い方


GitSVNの構築


SVNの構築をした後に

git svn clone -s https://サーバーアドレス

と入力する。

すでにコミットがある場合はでかすぎるて動かない場合があるので、
動かない時はコレを使う。 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 本当は別コマンドに慣れたい


kakakakakku.hatenablog.com

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で保存しておける。

(SSHの場合でGitHub,Windowsの場合)

git config --global credential.helper wincred

で保存される。
wincredという補助ツールらしい?
Windowsの認証情報を保存しておくやつを利用する

git config --global credential.helper cache

タイムアウトするまで使える。デフォでは15分?

GitLFSの認証情報を保存しておく


ssh-add /Users/user_name/.ssh/id_rsa

何か怒られたら?

eval `ssh-agent`

↑をしてから実行

GitConfigのデフォルト保存場所


Windows

C:¥Users¥[ユーザー名]¥.gitconfig

Mac

~/.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リポジトリの中にもう一つリポジトリを持てる機能。
メインの方に差分をあげておくことも出来るし、サブモジュール側の方にプッシュすることもできるっぽい。

このサイトがわかりやすかった

maku77.github.io

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)

まとめ


とりあえず、思い浮かんだものだけ。
今後も詰まったら追加していきたい。