れさくのブログ

れさくのブログ

*

ケースで覚えるgit自習室:ケースその3「コミットをまとめろ」

      2015/03/02

Git-logo.svg

git checkout -b 日本史 upstream/世界史

日本史の教科書って何ページくらいありましたっけ?
300?400?
まあ300ページくらいでしょう。

では世界史の教科書は?
やはり300ページくらいだったはずです。

その世界史の教科書の中で、日本に触れている箇所って何ページくらいでしょう?
手元に教科書なんてないので想像ですが、たぶん近代以降で10ページとか20ページくらいでしょう。

でも日本史の教科書は300ページあります。

なのでこれを丸ごと世界史の教科書にブチ込んで世界史の教科書が600ページになったら、たぶん他の国から文句が出る。
あと学生が怒る。

日本の歴史は世界の歴史の一部です。
そして日本の歴史は300ページあります。
しかしそれを世界の歴史に入れるには10ページ程度にまとめないといけない現実。


ケースその3「コミットをまとめろ」

「コミットしたからプッシュするよ」
「修正多すぎでコミット多すぎ。見づらいからコミットまとめて」
「らじゃっくす」

修正が続いたのでコミットをまとめる。

git rebase -i HEAD~~

なら最新2件が出てくる。

git rebase -i <ハッシュ>

なら最新からその番号まで。

実行するとこうなることもある。

It seems that there is already a rebase-merge directory, and
I wonder if you are in the middle of another rebase. If that is the
case, please try
git rebase (–continue | –abort | –skip)
If that is not the case, please
rm -fr “/Users/resaku/Desktop/denpanomori/.git/rebase-merge”
and run me again. I am stopping in case you still have something
valuable there.

これはrebaseやりかけのものがあるという警告。そんな記憶が無いなら

rm -fr /Users/resaku/Desktop/denpanomori/.git/rebase-merge

って消してしまおう。

改めてやり直す。

git log -5

最新の5件がでる。

commit 12ab34cd5612ab34cd5612ab34cd56

例えばその中の最新4件をまとめたかったら、4件目のコミットのハッシュをコピーして

git rebase -i 12ab34cd5612ab34cd5612ab34cd56

エディットモードでpickが4つならぶ。一番上のを残して他の3つをpick→squashにする。
(最新は一番下だがこれを残すことはできない。一番上をsquashすると変なことになる)
esq:wqで抜ける。

確認しよう。

git log -5

問題なければpush

git push origin PROJECT-003

しかしほぼ間違いなく

! [rejected] PROJECT-1631 -> PROJECT-1631 (non-fast-forward)

と怒られる。
「コミットをまとめる=rebase=最新でなくなる」だから、これは正しい挙動。

なので-f付けて強制pushしても大丈夫。

git push -f origin PROJECT-1631

これで完了。

 - ケースで覚えるgit自習室

adpc

adpc

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  関連記事

ダウンロード
ケースで覚えるgit自習室:ケースその2「作業中に別の作業が割り込んでくる」

かわいくないけどMacに貼ることによって 「開発者の気分に浸れる」 「スタバでの …

gitで今いるブランチ名を常に表示させる方法

macでコマンドラインでgitをギトギトにいじる日々。 慣れてくると「ここはどこ …

Git-logo.svg
ケースで覚えるgit自習室:ケースその1「普通に作業を開始して、そして終了する」

「教室」ではなく「自習室」なところがいろいろアレなカテゴリーです。 大昔インター …