「Gitコマンド備忘録」の版間の差分
(同じ利用者による、間の17版が非表示) | |||
行1: | 行1: | ||
− | * (自分が) | + | * (自分が)よく使うGitコマンドを備忘録的に書きつけていきます。 |
* たまにVSCode([[Visual Studio Code]])の拡張機能[https://gitlens.amod.io GitLens]における当該機能についてもメモります。 | * たまにVSCode([[Visual Studio Code]])の拡張機能[https://gitlens.amod.io GitLens]における当該機能についてもメモります。 | ||
+ | |||
+ | == コンフィグ系 == | ||
+ | === <u>ユーザー情報を登録する</u> === | ||
+ | <pre> | ||
+ | git config --global user.name "Hoge Fugako" | ||
+ | git config --global user.email "hoge.fugako@piyo.com" | ||
+ | </pre> | ||
+ | 特定のリポジトリのみで有効化するには --global ではなくて --local を代わりに指定する。 | ||
+ | |||
== やり直し系 == | == やり直し系 == | ||
行6: | 行15: | ||
<b>コマンド</b> | <b>コマンド</b> | ||
$ git reset --soft <commit> | $ git reset --soft <commit> | ||
− | + | 現在のコミット状態を過去の<commit>の時点まで戻す。その間コミットされたものはステージング状態になる。 | |
<b>GitLens</b> | <b>GitLens</b> | ||
* "Reset to commit"に相当する。 | * "Reset to commit"に相当する。 | ||
** GitLensで特定のコミットを右クリックし、Reset to commitすればそのコミットまでreset --softされる。 | ** GitLensで特定のコミットを右クリックし、Reset to commitすればそのコミットまでreset --softされる。 | ||
+ | |||
+ | |||
+ | === <u>ローカルにコミットしちゃってかつリモートにプッシュしちゃったものを元に戻す</u> === | ||
+ | reset --hardは共同作業とかしてるときにやばいからやめたほうがいいらしい。 | ||
+ | |||
+ | 無かったことにしないで、やっちまったことを打ち消す様なコミットをローカルで入れ、それをリモートにプッシュするのがいい方法、ってことなのか? | ||
+ | |||
+ | revertを使う。 | ||
+ | <pre> | ||
+ | $ git revert <打ち消したいコミット> | ||
+ | $ git push <リモート> <プッシュしたいブランチ> | ||
+ | </pre> | ||
+ | |||
+ | これで、失敗しちゃった履歴は残るが、コミット、プッシュ前の状態に戻る。 | ||
+ | |||
+ | == マージ系 == | ||
+ | === <u>fast-forwardマージを禁止する</u> === | ||
+ | $ git config --global merge.ff false | ||
+ | |||
+ | * fast-foward(ff) マージ | ||
+ | ** 例えばmasterブランチからdevelブランチを作り、develブランチでコーディングし、それをmasterブランチにマージする時、fast-forwardだとmasterブランチのHEADがdevelブランチの先頭に飛んでくる形になる。 | ||
+ | ** 個人的にはffすると分岐や合流のタイミングがわかりにくいので、ff禁止の方が好き。 | ||
+ | |||
+ | |||
+ | === <u>マージ元ブランチのコミット履歴なしでマージする</u> === | ||
+ | 例えばdevelブランチでごちゃごちゃとコミットを続け、それを公開用のmasterブランチにマージしたい時、develブランチでの履歴は持ち込みたくない。 | ||
+ | |||
+ | そんなときは、以下。 | ||
+ | <pre> | ||
+ | $ git checkout master | ||
+ | |||
+ | $ git -c merge.ff=true merge --squash devel | ||
+ | |||
+ | $ git commit -am "Merge branch devel" | ||
+ | </pre> | ||
+ | |||
+ | merge --squashはコミット自体はしない。develでの数々のコミットがまとめて1個のコミットであるかのごとく(つまりdevelのHEADだけが?)masterにやってきて、変更がステージングされる。 | ||
+ | |||
+ | fast-forwardを禁止しているとsquash mergeできないので、上記の様に -c merge.ff=true として一時的にコンフィグを上書きする必要あり。 | ||
+ | |||
+ | で、commitする。 | ||
+ | |||
+ | == リモート系 == | ||
+ | === <u>リモートブランチを削除する </u> === | ||
+ | <pre> | ||
+ | $ git push --delete <リモートリポジトリ名> <ブランチ名> | ||
+ | </pre> | ||
+ | |||
+ | deleteをpushするってなんかよくわからんな。 | ||
+ | |||
+ | === <u>GitHubでフォークしたリポジトリの初期設定</u> === | ||
+ | * https://help.github.com/en/articles/configuring-a-remote-for-a-fork | ||
+ | |||
+ | [https://github.com/3dem/relion.git relion本家]からフォークしたリポジトリを例にとって説明する。 | ||
+ | |||
+ | まずは自分のリポジトリをクローンしてくる。 | ||
+ | $ git clone https://github.com/kttn8769/relion | ||
+ | |||
+ | $ cd relion | ||
+ | $ git remote -v | ||
+ | origin https://github.com/kttn8769/relion (fetch) | ||
+ | origin https://github.com/kttn8769/relion (push) | ||
+ | 現状は自分のGitHubリポジトリがリモート"origin"として設定されているのみ。 | ||
+ | |||
+ | 本家3dem/relionをリモートとして追加するには、 | ||
+ | $ git remote add upstream https://github.com/3dem/relion.git | ||
+ | とする。 | ||
+ | |||
+ | $ git remote -v | ||
+ | origin https://github.com/kttn8769/relion (fetch) | ||
+ | origin https://github.com/kttn8769/relion (push) | ||
+ | upstream https://github.com/3dem/relion.git (fetch) | ||
+ | upstream https://github.com/3dem/relion.git (push) | ||
+ | リモート"upstream"が追加されている。 | ||
+ | |||
+ | === <u>GitHubでフォークしたリポジトリを最新にする</u> === | ||
+ | * https://help.github.com/en/articles/syncing-a-fork | ||
+ | |||
+ | リモート"upstream"の情報を取ってくる。 | ||
+ | $ git fetch upstream | ||
+ | |||
+ | 自分のローカルリポジトリのmasterブランチに移動。 | ||
+ | $ git checkout master | ||
+ | |||
+ | upstream/masterを自分のローカルリポジトリのmasterへマージする。 | ||
+ | $ git merge upstream/master | ||
+ | |||
+ | 自分のGitHubのリポジトリに反映するにはoriginへpushする。 | ||
+ | $ git push origin master | ||
+ | |||
+ | (間違ってgit push upstream masterとかしたらどうなんだ。。) | ||
+ | |||
+ | == 外部ツール系 == | ||
+ | === <u>エディタをvimにする</u> === | ||
+ | Ubuntuだとnanoというエディタがデフォルトで設定されているので、vimに変更する。 | ||
+ | |||
+ | <pre> | ||
+ | $ git config --global core.editor "vim" | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | == エイリアス == | ||
+ | === <u>ワンライン・ログ</u> === | ||
+ | 以下のようなエイリアスを登録する。 | ||
+ | <pre> | ||
+ | $ git config --global alias.lol 'log --graph --oneline --all --decorate --simplify-by-decoration' | ||
+ | </pre> | ||
+ | |||
+ | 出力はこれに色がついた感じ | ||
+ | <pre> | ||
+ | $ git lol | ||
+ | * c3b3364 (HEAD, tag: 3.0.5, origin/master, origin/HEAD, master) This is 3.0.5. | ||
+ | * e9afc9a (tag: 3.0.4) Multibody: fix crash during initialisation (reported by Rafael Fernández Leiro). Call this 3.0.4. | ||
+ | * edb78c0 (tag: 3.0.3) ml_optimiser: fixed integer overflow at very fine angular sampling. Call this 3.0.3. | ||
+ | * f873543 (tag: 3.0.2) relion_refine_mpi: Fix buffer overflow during initialisation (solves issue #449; thanks to @Fravadona for finding this and suggesting the fix) | ||
+ | * 98171da (tag: 3.0.1) Call this 3.0.1 because we changed (fixed) relion_refine. | ||
+ | * 600499f (tag: 3.0) Merge branch 'beta-repo-3.0' into 3.0 | ||
+ | * decd571 Merge branch 'beta-repo-3.0' into 3.0 | ||
+ | |\ | ||
+ | | * ffb7197 Merge branch 'sjors-dev' into sjorsmerge | ||
+ | | |\ | ||
+ | | | * 12a2cd6 sjors dev-code @a7f194b (src) | ||
+ | | * 445e1c8 Initial commit with contributors | ||
+ | * ce6420a (tag: 2.1, origin/ver2.1) Use "Slower, more exhaustive search" in CTFFIND 4.1 unless --fast_search is ON. "Slower search" was OFF by default in CTFFIND 4.1.5, but turned out to be less accurate (ref: http://grigoriefflab.janelia.org/ctffind4). | ||
+ | * e7607a8 (tag: 2.1.b1) v.2.1-beta-1 (2.1.b1) | ||
+ | </pre> | ||
+ | |||
+ | * 出典は独習Git https://www.amazon.co.jp/独習Git-リック・ウマリ/dp/4798144614 | ||
+ | ** 最初はとっつきにくいGitですが、この本は結構おすすめ |
2020年6月11日 (木) 06:35時点における最新版
- (自分が)よく使うGitコマンドを備忘録的に書きつけていきます。
- たまにVSCode(Visual Studio Code)の拡張機能GitLensにおける当該機能についてもメモります。
目次
コンフィグ系
ユーザー情報を登録する
git config --global user.name "Hoge Fugako" git config --global user.email "hoge.fugako@piyo.com"
特定のリポジトリのみで有効化するには --global ではなくて --local を代わりに指定する。
やり直し系
コミットされたものをステージング状態に戻す
コマンド
$ git reset --soft <commit>
現在のコミット状態を過去の<commit>の時点まで戻す。その間コミットされたものはステージング状態になる。
GitLens
- "Reset to commit"に相当する。
- GitLensで特定のコミットを右クリックし、Reset to commitすればそのコミットまでreset --softされる。
ローカルにコミットしちゃってかつリモートにプッシュしちゃったものを元に戻す
reset --hardは共同作業とかしてるときにやばいからやめたほうがいいらしい。
無かったことにしないで、やっちまったことを打ち消す様なコミットをローカルで入れ、それをリモートにプッシュするのがいい方法、ってことなのか?
revertを使う。
$ git revert <打ち消したいコミット> $ git push <リモート> <プッシュしたいブランチ>
これで、失敗しちゃった履歴は残るが、コミット、プッシュ前の状態に戻る。
マージ系
fast-forwardマージを禁止する
$ git config --global merge.ff false
- fast-foward(ff) マージ
- 例えばmasterブランチからdevelブランチを作り、develブランチでコーディングし、それをmasterブランチにマージする時、fast-forwardだとmasterブランチのHEADがdevelブランチの先頭に飛んでくる形になる。
- 個人的にはffすると分岐や合流のタイミングがわかりにくいので、ff禁止の方が好き。
マージ元ブランチのコミット履歴なしでマージする
例えばdevelブランチでごちゃごちゃとコミットを続け、それを公開用のmasterブランチにマージしたい時、develブランチでの履歴は持ち込みたくない。
そんなときは、以下。
$ git checkout master $ git -c merge.ff=true merge --squash devel $ git commit -am "Merge branch devel"
merge --squashはコミット自体はしない。develでの数々のコミットがまとめて1個のコミットであるかのごとく(つまりdevelのHEADだけが?)masterにやってきて、変更がステージングされる。
fast-forwardを禁止しているとsquash mergeできないので、上記の様に -c merge.ff=true として一時的にコンフィグを上書きする必要あり。
で、commitする。
リモート系
リモートブランチを削除する
$ git push --delete <リモートリポジトリ名> <ブランチ名>
deleteをpushするってなんかよくわからんな。
GitHubでフォークしたリポジトリの初期設定
relion本家からフォークしたリポジトリを例にとって説明する。
まずは自分のリポジトリをクローンしてくる。
$ git clone https://github.com/kttn8769/relion
$ cd relion $ git remote -v origin https://github.com/kttn8769/relion (fetch) origin https://github.com/kttn8769/relion (push)
現状は自分のGitHubリポジトリがリモート"origin"として設定されているのみ。
本家3dem/relionをリモートとして追加するには、
$ git remote add upstream https://github.com/3dem/relion.git
とする。
$ git remote -v origin https://github.com/kttn8769/relion (fetch) origin https://github.com/kttn8769/relion (push) upstream https://github.com/3dem/relion.git (fetch) upstream https://github.com/3dem/relion.git (push)
リモート"upstream"が追加されている。
GitHubでフォークしたリポジトリを最新にする
リモート"upstream"の情報を取ってくる。
$ git fetch upstream
自分のローカルリポジトリのmasterブランチに移動。
$ git checkout master
upstream/masterを自分のローカルリポジトリのmasterへマージする。
$ git merge upstream/master
自分のGitHubのリポジトリに反映するにはoriginへpushする。
$ git push origin master
(間違ってgit push upstream masterとかしたらどうなんだ。。)
外部ツール系
エディタをvimにする
Ubuntuだとnanoというエディタがデフォルトで設定されているので、vimに変更する。
$ git config --global core.editor "vim"
エイリアス
ワンライン・ログ
以下のようなエイリアスを登録する。
$ git config --global alias.lol 'log --graph --oneline --all --decorate --simplify-by-decoration'
出力はこれに色がついた感じ
$ git lol * c3b3364 (HEAD, tag: 3.0.5, origin/master, origin/HEAD, master) This is 3.0.5. * e9afc9a (tag: 3.0.4) Multibody: fix crash during initialisation (reported by Rafael Fernández Leiro). Call this 3.0.4. * edb78c0 (tag: 3.0.3) ml_optimiser: fixed integer overflow at very fine angular sampling. Call this 3.0.3. * f873543 (tag: 3.0.2) relion_refine_mpi: Fix buffer overflow during initialisation (solves issue #449; thanks to @Fravadona for finding this and suggesting the fix) * 98171da (tag: 3.0.1) Call this 3.0.1 because we changed (fixed) relion_refine. * 600499f (tag: 3.0) Merge branch 'beta-repo-3.0' into 3.0 * decd571 Merge branch 'beta-repo-3.0' into 3.0 |\ | * ffb7197 Merge branch 'sjors-dev' into sjorsmerge | |\ | | * 12a2cd6 sjors dev-code @a7f194b (src) | * 445e1c8 Initial commit with contributors * ce6420a (tag: 2.1, origin/ver2.1) Use "Slower, more exhaustive search" in CTFFIND 4.1 unless --fast_search is ON. "Slower search" was OFF by default in CTFFIND 4.1.5, but turned out to be less accurate (ref: http://grigoriefflab.janelia.org/ctffind4). * e7607a8 (tag: 2.1.b1) v.2.1-beta-1 (2.1.b1)
- 出典は独習Git https://www.amazon.co.jp/独習Git-リック・ウマリ/dp/4798144614
- 最初はとっつきにくいGitですが、この本は結構おすすめ