「Gitコマンド備忘録」の版間の差分

提供: Eospedia
移動: 案内検索
 
(同じ利用者による、間の16版が非表示)
行1: 行1:
== この記事について ==
+
* (自分が)よく使うGitコマンドを備忘録的に書きつけていきます。
* (自分が)よく使う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 を代わりに指定する。
 +
  
 
== やり直し系 ==
 
== やり直し系 ==
行7: 行15:
 
<b>コマンド</b>
 
<b>コマンド</b>
 
  $ git reset --soft <commit>
 
  $ git reset --soft <commit>
現在の状態を過去の<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)