🎉
新卒一年目の自分がよく悩むgitの使い方②
commitの仕様
- mainブランチでコミット行う
- origin/mainブランチ(追跡ブランチ)でコミットを行う
origin/mainはリモートの更新時のみ更新される
👉普通はやらない
rebaseでコミット履歴を綺麗にする
前提
mainブランチでfetch
mainブランチでorigin/mainをrebase
mainブランチでpush
上記の場合はC4、つまりローカルの記述が優先されていることになる
コンフリクトの修正
追跡ブランチとローカルブランチのmergeを行うことで起きてしまう
pushすると、mergeがうまくいかない(ここでのmergeはpushで行われてるので、コミット生成はされない)
同じファイルの同じ箇所の変更がかぶっているため、どちらを優先すればいいのかわからない
👉コンフリクトがおこる
ファイルは以下のようなことになっている
<<<<<<< HEAD
ローカルブランチでの変更
=======
=======
リモートブランチでの変更(追跡ブランチをみてる)
>>>>>>> 〇〇
何を優先(またはどちらのコードも残す)するかを決め修正、コミットしなおす
git add,git commit -m "C5"
mainブランチでgit push
mergeの中止(rebaseする)
$ git merge --abort
--abortすると...
となり、rebaseすることも選択できる
mainブランチでgit push
一時退避
$ git stash -u save 〇〇
-uをつけることで未追跡である新規ファイルも含めるという意味になる
実態はただのコミット
$ git stash list
$ git stashの一覧表示ができる
順番の確認が行える
$ git stash apply 番号
退避させた最新の変更を戻す
最新のものではなく、指定したい場合はstashの一覧表示の何番目かを指定
$ git stash drop 番号
退避の削除
上記と同じく番号指定が可能
$ git stash pop 番号
git stash apply
が行ったあと、git stash drop
の処理を走らせるのと同義
$ git stash clear
退避全削除
Discussion