iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Git のコミットをまとめよう

今回は、git の commit をまとめる方法を紹介します。git の操作とかは結構忘れがちで、毎回ググってると効率が悪いのでこれを気にしっかり覚えるようにします🤧

それではまとめていく🧑🏻‍💻

  1. まずは git log --oneline で、どの commit をまとめたいのかを決めます。今回は、Carthage build で --platform iOS での ビルドをまとめるため c802e3e17edaba565e をまとめていきます。
$ git log --oneline
d4b4461e2 (HEAD -> support-xcode-12) Modify timeout type to DispatchTimeInterval
af03105bf Use Xcode 12.0.1 on CircleCi
74d6efa4b Add limited status
e5db7c7ca Follow swift new syntax
07beff61c Use Swift5.3
c802e3e17 Run ./carthage.sh build KeychainAccess Cartography RxSwift SwiftTask Alamofire CodableFirebase Kingfisher EmotionUI SwiftyJSON facebook-swift-sdk lottie-ios SwiftMessages --no-use-binaries --platform iOS
f77de971f Run ./carthage.sh build RxSwift Alamofire ObjectMapper --no-use-binaries --platform watchOS
edaba565e Run ./carthage.sh build XCGLogger --no-use-binaries --platform iOS
...
  1. rebase -i HEAD~8edaba565e までの commit を編集できるようにします。HEAD~数値 は、最新の commit から編集したいコミットまでの数です。
$ git rebase -i HEAD~8
hint: Waiting for your editor to close the file... 
pick edaba565e Run ./carthage.sh build XCGLogger --no-use-binaries --platform iOS
pick f77de971f Run ./carthage.sh build RxSwift Alamofire ObjectMapper --no-use-binaries --platform watchOS
pick c802e3e17 Run ./carthage.sh build KeychainAccess Cartography RxSwift SwiftTask Alamofire CodableFirebase Kingfisher EmotionUI SwiftyJSON facebook-swift-sdk lottie-ios SwiftMessages --no-use-binaries --platform iOS
pick 07beff61c Use Swift5.3
pick e5db7c7ca Follow swift new syntax
pick 74d6efa4b Add limited status
pick af03105bf Use Xcode 12.0.1 on CircleCi
pick d4b4461e2 Modify timeout type to DispatchTimeInterval

# Rebase ...
  1. まとめたい commit が連続になるように順番を変えます。ちなみに i を押すと INSERT モードになり変更が可能になります。
$ git rebase -i HEAD~8
hint: Waiting for your editor to close the file... 
pick f77de971f Run ./carthage.sh build RxSwift Alamofire ObjectMapper --no-use-binaries --platform watchOS
pick c802e3e17 Run ./carthage.sh build KeychainAccess Cartography RxSwift SwiftTask Alamofire CodableFirebase Kingfisher EmotionUI SwiftyJSON facebook-swift-sdk lottie-ios SwiftMessages --no-use-binaries --platform iOS
pick edaba565e Run ./carthage.sh build XCGLogger --no-use-binaries --platform iOS
pick 07beff61c Use Swift5.3
pick e5db7c7ca Follow swift new syntax
pick 74d6efa4b Add limited status
pick af03105bf Use Xcode 12.0.1 on CircleCi
pick d4b4461e2 Modify timeout type to DispatchTimeInterval

# Rebase ...
  1. まとめたい commit 先頭の commit の picks または squash に変更して保存します。squash を指定したコミットは 1つ前の(1つ古い)コミットを統合しようとします。ちなみに、esc を押して INSERT モードを終了してから、:wq と入力することで保存できます。これは割とよく使う vim コマンドですので、覚えておくといいでしょう。(キャンセルしたい場合は :q!)
$ git rebase -i HEAD~8
hint: Waiting for your editor to close the file... 
pick f77de971f Run ./carthage.sh build RxSwift Alamofire ObjectMapper --no-use-binaries --platform watchOS
pick c802e3e17 Run ./carthage.sh build KeychainAccess Cartography RxSwift SwiftTask Alamofire CodableFirebase Kingfisher EmotionUI SwiftyJSON facebook-swift-sdk lottie-ios SwiftMessages --no-use-binaries --platform iOS
s edaba565e Run ./carthage.sh build XCGLogger --no-use-binaries --platform iOS
pick 07beff61c Use Swift5.3
pick e5db7c7ca Follow swift new syntax
pick 74d6efa4b Add limited status
pick af03105bf Use Xcode 12.0.1 on CircleCi
pick d4b4461e2 Modify timeout type to DispatchTimeInterval

# Rebase ...
  1. コミットメッセージを編集する vim が開くので、修正して保存しましょう。

Before

# This is the 1st commit message:

Run ./carthage.sh build KeychainAccess Cartography RxSwift SwiftTask Alamofire CodableFirebase Kingfisher EmotionUI SwiftyJSON facebook-swift-sdk lottie-ios SwiftMessages --no-use-binaries --platform iOS

# This is the commit message #2:

Run ./carthage.sh build XCGLogger --no-use-binaries --platform iOS

# Please enter the commit message for your changes. Lines starting
# .....

After

# This is the 1st commit message:

Run ./carthage.sh build XCGLogger KeychainAccess Cartography RxSwift SwiftTask Alamofire CodableFirebase Kingfisher EmotionUI SwiftyJSON facebook-swift-sdk lottie-ios SwiftMessages --no-use-binaries --platform iOS

# This is the commit message #2:

# Please enter the commit message for your changes. Lines starting

これで、commit のまとめが完了しました🎉

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com