Bagaimana Anda rebase perubahan cabang saat ini di atas perubahan yang digabungkan?

144

Baik. Jika saya di cabang (katakanlah working), dan saya ingin menggabungkan perubahan dari cabang lain (katakanlah master), maka saya menjalankan perintah git-merge mastersementara di workingcabang, dan perubahan bisa digabung tanpa mengubah sejarah sama sekali. Jika saya menjalankan git-rebase master, maka perubahan di masterrebased untuk diletakkan di atas workingcabang saya . Tetapi bagaimana jika saya ingin menggabungkan perubahan dari mastertetapi rebase perubahan saya diworking menjadi di atas? Bagaimana aku melakukan itu? Bisakah itu dilakukan?

Saya dapat berlari git-rebase workingdi mastercabang saya untuk menempatkan perubahan saya di atas di mastercabang, tetapi saya ingin dapat melakukannya di workingcabang saya , dan saya tidak tahu caranya. Yang paling dekat yang bisa saya pikirkan adalah membuat cabang baru dari masterdan kemudian rebase workingperubahan di atas itu, tapi kemudian saya akan memiliki cabang baru alih-alih mengubah workingcabang.

Jonathan M Davis
sumber

Jawaban:

255

Anda mendapatkan apa yang rebasedilakukan mundur. git rebase mastermelakukan apa yang Anda minta - mengambil perubahan pada cabang saat ini (karena divergensi dari master) dan mengulanginya di atas master, kemudian menetapkan kepala cabang saat ini untuk menjadi kepala dari sejarah baru itu. Itu tidak memutar ulang perubahan dari masteratas cabang saat ini.

hobbs
sumber
3
@ Jonathan, itu keren. Ini sedikit topik yang sulit. By the way, git rebase workingakan memindahkan masterperubahan (setelah titik yang workingbercabang) menjadi di atas workingcabang - tapi itu bukan hal yang sangat masuk akal untuk dilakukan untuk master:)
hobbs
66

Cara lain untuk melihatnya adalah dengan mempertimbangkan git rebase master:

Rebase cabang saat ini di atas master

Di sini, ' master' adalah cabang hulu , dan itu menjelaskan mengapa, selama rebase, oursdan theirsdibalik .

VONC
sumber
Itu juga menjelaskan mengapa LOCAL dan REMOTE terbalik. Terima kasih.
AVIDeveloper
@ AVIDeveloper pada LOCAL dan REMOTE, Anda juga dapat membaca stackoverflow.com/a/3052118/6309
VonC
5
@@ VonC: Terima kasih. Yap, setelah menghabiskan sore bergumam pada diri sendiri "REMOTE adalah cabang saya .. LOKAL bukan milikku", semuanya tenggelam. Jujur, saya lebih suka melihat nama cabang (atau singkatan. SHA) daripada REMOTE / LOCAL / milik kita / milik mereka / milikku. Pikiranku sama tentang git difftoolkiri / kanan yang mengerikan. Mengembalikan topik, tetapi bagi difftoolsaya tetap berpegang pada git-berbaur dan menikmati nama-nama seperti 'working-dir', 'stash @ {0}', dan seterusnya.
AVIDeveloper
1
@VonC: Bisakah Anda menjelaskan bagaimana setelah kita melakukannya: git checkout branch_to_update git rebase masterSaya mendapatkan git log komit di atas cabang lokal, sebaliknya?
JavaSa
1
@JavaSa Aneh, kecuali rebase tidak selesai dengan benar? Anda mungkin perlu mengajukan pertanyaan terpisah dengan rincian lebih lanjut di dalamnya.
VonC