今回は、git の commit をまとめる方法を紹介します。git の操作とかは結構忘れがちで、毎回ググってると効率が悪いのでこれを気にしっかり覚えるようにします🤧
それではまとめていく🧑🏻💻
- まずは
git log --oneline
で、どの commit をまとめたいのかを決めます。今回は、Carthage build で--platform iOS
での ビルドをまとめるためc802e3e17
とedaba565e
をまとめていきます。
$ 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 ...
rebase -i HEAD~8
でedaba565e
までの 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 ...
- まとめたい 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 ...
- まとめたい commit 先頭の commit の
pick
をs
または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 ...
- コミットメッセージを編集する 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 のまとめが完了しました🎉
参考
- https://qiita.com/takke/items/3400b55becfd72769214
- https://qiita.com/tsuuuuu_san/items/f708a9f7ea8ab8eb6945