Git cheat sheet: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(→実用編) |
||
(46 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
=基本操作= |
|||
github で repository つくったら手順がでてくる |
github で repository つくったら手順がでてくる |
||
<syntaxhighlight lang="bash" enclose="div"> |
|||
mkdir hoge |
|||
mkdir hoge |
|||
cd hoge |
|||
git init |
|||
git init |
|||
touch README.md |
|||
touch README.md |
|||
git add README.md |
|||
git commit -m 'first commit' |
|||
git commit -m 'first commit' |
|||
git remote add origin git@github.com:fuga/hoge.git |
|||
git remote add origin git@github.com:fuga/hoge.git |
|||
git push -u origin master |
|||
</syntaxhighlight> |
|||
編集後 |
編集後 |
||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git add README.md |
|||
git add README.md |
|||
git commit -m 'message here' |
|||
git commit -m 'message here' |
|||
git push |
|||
git push |
|||
</syntaxhighlight> |
|||
rename |
rename |
||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git mv README.md README |
|||
git mv README.md README |
|||
git commit -m 'message here' |
|||
git commit -m 'message here' |
|||
git push |
|||
git push |
|||
</syntaxhighlight> |
|||
fork して放置したリポジトリを元のリポジトリと合わせる |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git pull 元のリポジトリ master |
|||
git push |
|||
</syntaxhighlight> |
|||
ブランチを切る |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git checkout -b my_new_branch |
|||
</syntaxhighlight> |
|||
ブランチを push |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git push origin my_new_branch |
|||
</syntaxhighlight> |
|||
=規定値もろもろ= |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git config --global user.email foo@bar |
|||
git config --global user.name "John Doe" |
|||
git config --global core.editor emacs |
|||
</syntaxhighlight> |
|||
=プルリクエストのパターン= |
|||
<syntaxhighlight lang="text" enclose="div"> |
|||
github上でfork |
|||
そいつを git clone |
|||
</syntaxhighlight> |
|||
現在のブランチを確認すること |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git checkout master |
|||
git checkout -b 作業内容がよく分かるブランチ名 |
|||
</syntaxhighlight> |
|||
変更を加えてコミット・Signed-off-by 付ける(openwrtとかは) |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git commit -s -m '完結な説明' |
|||
</syntaxhighlight> |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git push origin 作業内容がよく分かるブランチ名 |
|||
</syntaxhighlight> |
|||
<syntaxhighlight lang="text" enclose="div"> |
|||
github上でプルリクエスト |
|||
</syntaxhighlight> |
|||
無事マージされたら作業ブランチを消す |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git branch -d 作業内容がよく分かるブランチ名 |
|||
</syntaxhighlight> |
|||
マージされなっかった作業ブランチを消す |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git branch -D 作業内容がよく分かるブランチ名 |
|||
</syntaxhighlight> |
|||
githubの該当ブランチを消す |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git push origin :作業内容がよく分かるブランチ名 |
|||
</syntaxhighlight> |
|||
元のリポジトリのコミットを追いかける |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git remote add upstream 元のリポジトリ |
|||
git checkout master |
|||
git pull upstream master |
|||
</syntaxhighlight> |
|||
元のリポジトリの新ブランチを追っかける |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git fetch upstream |
|||
git checkout 新ブランチ |
|||
git push origin 新ブランチ |
|||
</syntaxhighlight> |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git checkout 作業ブランチ |
|||
git rebase master 作業ブランチ |
|||
</syntaxhighlight> |
|||
= 実用編 = |
|||
commit コメントメッセージ間違ったので直前の commit 取り消したい |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git log |
|||
git reset --hard HEAD^ |
|||
git log |
|||
</syntaxhighlight> |
|||
直前のコミットをやり直し。というかcommitメッセージの書き換え。 |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git commit --amend |
|||
</syntaxhighlight> |
|||
git diff に新規追加ファイルを含める |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
# 新規ファイル作る |
|||
git add -N 新規ファイルフルパス |
|||
git diff |
|||
</syntaxhighlight> |
|||
squash と言われた場合 |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git log --oneline |
|||
git rebase -i HEAD~X (X = number of commits to edit) |
|||
# 先頭行以外 pick -> squash |
|||
# セーブ |
|||
# コメントを編集 |
|||
# セーブ |
|||
git push -f |
|||
# こちらが安全なのかな git push --force-with-lease |
|||
</syntaxhighlight> |
|||
過去の commitメッセージの書き換え。 |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git log |
|||
# 書き換えるcommitの直下のhash |
|||
git rebase -i 直下のhash |
|||
# 先頭を pick -> edit |
|||
# セーブ |
|||
git commit --amend |
|||
# コメントを編集 |
|||
# セーブ |
|||
git rebase --continue |
|||
git push -f |
|||
# こちらが安全なのかな git push --force-with-lease |
|||
</syntaxhighlight> |
|||
PR送信してマージされた後の開発ブランチをマスターに同期 |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git checkout master |
|||
git pull |
|||
git checkout my-dev |
|||
git rebase master |
|||
git push |
|||
</syntaxhighlight> |
|||
PR送信したあとマージされる前で、アップストリーム・マスターの自分のPR以外の更新を取り込む。 |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git checkout master |
|||
git pull upstream master |
|||
git push |
|||
git checkout my-dev |
|||
git rebase master |
|||
git push --force-with-lease |
|||
</syntaxhighlight> |
|||
upstream に新しいブランチが切られた際に、それをフォークに反映 |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git fetch upstream |
|||
git checkout -b new_branch upstream/new_branch |
|||
git push -u origin new_branch |
|||
</syntaxhighlight> |
|||
いわゆる backport |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git checkout 対象ブランチ |
|||
git checkout -b 修正用ブランチ名 |
|||
git cherry-pick -x <commit_hash> |
|||
git push -u origin 修正用ブランチ名 |
|||
# そして PR |
|||
</syntaxhighlight> |
|||
複数のcherrypick。注意点は開始点の指定が一つ前になるので直感的でなく、そのために"^"をつける癖をつけたほうがよい。 |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git log --oneline |
|||
git cherry-pick -x {COMMIT-A}^..{COMMIT-Z} |
|||
</syntaxhighlight> |
|||
作業ミスして upstream と強制同期 |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git fetch upstream |
|||
git reset --hard upstream/master |
|||
</syntaxhighlight> |
|||
タグ名でブランチ作成 |
|||
<syntaxhighlight lang="bash" enclose="div"> |
|||
git tag |
|||
git checkout -b 新ブランチ名 refs/tags/タグ名 |
|||
</syntaxhighlight> |
Latest revision as of 02:13, 30 April 2022
基本操作
github で repository つくったら手順がでてくる
mkdir hoge
cd hoge
git init
touch README.md
git add README.md
git commit -m 'first commit'
git remote add origin git@github.com:fuga/hoge.git
git push -u origin master
編集後
git add README.md
git commit -m 'message here'
git push
rename
git mv README.md README
git commit -m 'message here'
git push
fork して放置したリポジトリを元のリポジトリと合わせる
git pull 元のリポジトリ master
git push
ブランチを切る
git checkout -b my_new_branch
ブランチを push
git push origin my_new_branch
規定値もろもろ
git config --global user.email foo@bar
git config --global user.name "John Doe"
git config --global core.editor emacs
プルリクエストのパターン
github上でfork
そいつを git clone
現在のブランチを確認すること
git checkout master
git checkout -b 作業内容がよく分かるブランチ名
変更を加えてコミット・Signed-off-by 付ける(openwrtとかは)
git commit -s -m '完結な説明'
git push origin 作業内容がよく分かるブランチ名
github上でプルリクエスト
無事マージされたら作業ブランチを消す
git branch -d 作業内容がよく分かるブランチ名
マージされなっかった作業ブランチを消す
git branch -D 作業内容がよく分かるブランチ名
githubの該当ブランチを消す
git push origin :作業内容がよく分かるブランチ名
元のリポジトリのコミットを追いかける
git remote add upstream 元のリポジトリ
git checkout master
git pull upstream master
元のリポジトリの新ブランチを追っかける
git fetch upstream
git checkout 新ブランチ
git push origin 新ブランチ
git checkout 作業ブランチ
git rebase master 作業ブランチ
実用編
commit コメントメッセージ間違ったので直前の commit 取り消したい
git log
git reset --hard HEAD^
git log
直前のコミットをやり直し。というかcommitメッセージの書き換え。
git commit --amend
git diff に新規追加ファイルを含める
# 新規ファイル作る
git add -N 新規ファイルフルパス
git diff
squash と言われた場合
git log --oneline
git rebase -i HEAD~X (X = number of commits to edit)
# 先頭行以外 pick -> squash
# セーブ
# コメントを編集
# セーブ
git push -f
# こちらが安全なのかな git push --force-with-lease
過去の commitメッセージの書き換え。
git log
# 書き換えるcommitの直下のhash
git rebase -i 直下のhash
# 先頭を pick -> edit
# セーブ
git commit --amend
# コメントを編集
# セーブ
git rebase --continue
git push -f
# こちらが安全なのかな git push --force-with-lease
PR送信してマージされた後の開発ブランチをマスターに同期
git checkout master
git pull
git checkout my-dev
git rebase master
git push
PR送信したあとマージされる前で、アップストリーム・マスターの自分のPR以外の更新を取り込む。
git checkout master
git pull upstream master
git push
git checkout my-dev
git rebase master
git push --force-with-lease
upstream に新しいブランチが切られた際に、それをフォークに反映
git fetch upstream
git checkout -b new_branch upstream/new_branch
git push -u origin new_branch
いわゆる backport
git checkout 対象ブランチ
git checkout -b 修正用ブランチ名
git cherry-pick -x <commit_hash>
git push -u origin 修正用ブランチ名
# そして PR
複数のcherrypick。注意点は開始点の指定が一つ前になるので直感的でなく、そのために"^"をつける癖をつけたほうがよい。
git log --oneline
git cherry-pick -x {COMMIT-A}^..{COMMIT-Z}
作業ミスして upstream と強制同期
git fetch upstream
git reset --hard upstream/master
タグ名でブランチ作成
git tag
git checkout -b 新ブランチ名 refs/tags/タグ名