Closed9

gitコマンド、メモ

awonosukeawonosuke
  • add取り消し
  • commitメッセージの変更
  • commit取り消し
  • commitログ確認(1行目だけ)
  • stash(作業の退避)
  • 安全なgit push -f
  • commitをまとめる
  • alias登録
awonosukeawonosuke

commitメッセージ変更

// 最新のcommitメッセージの修正(コマンド叩くとエディタが開く)※push前
$ git commit --ammend
// 1行の場合
$ git commit --ammend -m "[commit message]"

// 2つ以上前のcommitメッセージの修正 ※push前
$ git rebase -i HEAD~[number]
[number]: HEADからさかのぼるcommitの数
$ git rebase -i [previous-to-target-commit-id]
[previous-to-target-commit-id]: 対象とするcommitの1つ昔のcommitのIDを入れる
エディタで、対象となるcommitのe(dit)を選択し保存、次のインターフェースでcommitメッセージを修正

// push済みのcommitメッセージの変更(誰もそのpush内容をpullしてない状態)
$ git commit --ammend
$ git push --force-with-lease --force-if-includes <repository> <branch>

https://git-scm.com/book/ja/v2/Git-のさまざまなツール-歴史の書き換え
https://docs.github.com/ja/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message
https://stackoverflow.com/questions/8981194/changing-git-commit-message-after-push-given-that-no-one-pulled-from-remote

awonosukeawonosuke

commit履歴確認

// commitログを1行表示
$ git log --oneline
$ git log --pretty=oneline

// マージの履歴を見たい時
$ git log --oneline --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset %C(bold blue)<%an>%Creset'

https://tracpath.com/docs/git-log/

awonosukeawonosuke

stash(変更の退避)

// ローカルの変更を退避する(`--include-untracked|-u`はuntrackedファイルも一緒に退避する)
$ git stash -u

// 変更を退避する、名前を付ける
$ git stash save "stashname"

// 退避した変更を一覧
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log

// 退避した変更を再度適用する
$ git stash apply stash@{0}

// 退避した変更を削除する
$ git stash drop stash@{0}

// 退避した変更を適用して、削除する
$ git stash pop stash@{0}

https://git-scm.com/book/ja/v2/Git-のさまざまなツール-作業の隠しかたと消しかた
https://qiita.com/chihiro/items/f373873d5c2dfbd03250
https://tech-blog.rakus.co.jp/entry/20211012/git

awonosukeawonosuke

安全なgit push -f

push済の内容をrebaseした際にはその結果をリモートに反映する必要がある。その際にgit push --forceを利用するがgit push --forceは強制pushを行うため、他の開発者の変更を書き換えてしまう可能性があるため、安全ではない。そのため--force-with-lease--force-if-includesといったオプションを利用することで安全に変更を書き換えたpushが行える(というより、破壊的な書き換えができない)

$ git push --force-with-lease --force-if-includes <repository> <branch>

https://onk.hatenablog.jp/entry/2022/12/18/000000
https://git-scm.com/docs/git-push#Documentation/git-push.txt--f
https://zenn.dev/miyazi777/articles/6ac115b552d886c1f6fb
https://qiita.com/wMETAw/items/5f47dcc7cf57af8e449f
https://qiita.com/snjot/items/1d1cdc87be1238c339e7

awonosukeawonosuke

alias登録

$ git config --global alias.<alias-phrase> <target-command>

// [alias]の部分をエディタで直接いじる(他の設定もこれでいじれる)
$ git config --global --edit
[alias]
    log-graph = log --graph --oneline --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset %C(bold blue)<%an>%Creset'

--global(ユーザー単位)の他に--system(システム全体)、 (リポジトリ対象)で設定の適用範囲が変わる。というか、いじっている設定ファイルが違う。

https://git-scm.com/book/ja/v2/Git-の基本-Git-エイリアス
https://qiita.com/chihiro/items/04813c707cc665de67c5

このスクラップは2023/01/17にクローズされました