3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Git]コミット内容を別のブランチに移したい時[cherry-pick]

3
Posted at

はじめに

この記事は、プログラミングを学んでいる初心者が書いた記事になります。
Git操作で躓いた部分をまとめてみました。

git cherry-pickを使うに至ったシナリオ

私は最近、作業ブランチ(feature/active-storage)での修正を別ブランチ(develop)に反映する必要があり、git cherry-pick を使いました。

シナリオの詳細

個人開発ですが、以下のようにdevelopブランチを用いた運用で開発を行っていました。developブランチにはcoderabbitを住まわせ、AIによるコードレビューを行っていました。

mainブランチ (本番環境)
  ↑
developブランチ(coderabbitによるコードレビュー)
  ↑
機能開発(feature)ブランチ(今回はfeature/active-storageブランチ)

ローカルにて、
feature/active-storageブランチをpushし、develop ← feature/active-storageのプルリク提出。

その後、AIによるレビューの指摘事項を修正し、commit、push、mergeして終了のところをpushし忘れそのままmergeしてしまいました。
つまりcommit内容が反映されないままmergeさせてしまいました。
さらにはそのままリモートのfeature/active-storageブランチを削除してしまいました。

理想

現実:commitをpushし忘れ

pushし忘れに気づいた後

慌ててdeleteしたリモートのfeature/active-storageブランチをrestoreし、pushしましたが、

❯ git commit -m 'fix: coderabbit指摘事項修正'
[feature/active-storage 7f93fd0] fix: coderabbit指摘事項修正
 3 files changed, 4 insertions(+), 4 deletions(-)
 
❯ git push origin feature/active-storage
Enumerating objects: 21, done.
Counting objects: 100% (21/21), done.
Delta compression using up to 8 threads
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 985 bytes | 985.00 KiB/s, done.
Total 11 (delta 9), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (9/9), completed with 9 local objects.
To github.com:tantp-1111/mini_memory.git
   16100ac..7f93fd0  feature/active-storage -> feature/active-storage

merge後にpushされたcommitは、そのプルリクには自動では紐づかないようです。(上記のログを見ると問題なくpushできてそうに見えるのですが。)

やりたいこと

もうdevelop ← feature/active-storageのプルリクは閉じてしまったので、main ← developのプルリクにcommit内容(ID: 7f93fd0)を取り込ませようと考えました。

つまりやりたいことは
ローカルのfeature/active-storageブランチのcommit(ID: 7f93fd0)をdevelopブランチに適用することです。

commitを別ブランチ(developブランチ)に適用する手順

commitを取り込みたいブランチ(developブランチ)に移動します。

git checkout develop

ブランチを最新にします。

git pull origin develop

該当するcommitを今いるdevelopブランチに適用します。

git cherry-pick 7f93fd0

コンフリクトがあれば適宜修正します。

developブランチをpushし、developブランチのcommit内容としてプルリクにあげます。

git push origin develop

git stashとの違い

どちらも変更を移動するコマンドですが、内容は全く異なります。
git stashはコミットせずに作業途中の変更をセーブしたまま別のブランチに移動(退避)したい場合stashを使用します。

git stash
git stash list # セーブ内容を見れる
git stash pop <stash名> # 変更内容の復元

git stashは未コミットの変更を退避させる目的のため使用しますので、git cherry-pickとは使用用途が異なります。

コマンド 内容 目的
git stash 未コミットの変更 作業中断・一時退避
git cherry-pick すでにあるコミット 別ブランチに取り込む

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?