Apakah benar-benar perlu untuk mengerjakan beberapa bug sekaligus? Dan dengan "sekaligus," maksud saya "memiliki file yang diedit untuk beberapa bug pada saat yang sama." Karena kecuali Anda benar-benar membutuhkan itu, saya hanya akan mengerjakan satu bug pada satu waktu di lingkungan Anda. Dengan begitu Anda dapat menggunakan cabang & rebase lokal, yang menurut saya jauh lebih mudah daripada mengelola simpanan / panggung yang kompleks.
Katakanlah master ada di commit B. Sekarang kerjakan bug # 1.
git checkout -b bug1
Sekarang Anda menggunakan bug1 cabang. Buat beberapa perubahan, komit, tunggu ulasan kode. Ini bersifat lokal, jadi Anda tidak memengaruhi orang lain, dan itu seharusnya cukup mudah untuk membuat tambalan dari git diffs.
A-B < master
\
C < bug1
Sekarang Anda sedang mengerjakan bug2. Pergi kembali ke master dengan git checkout master
. Buat cabang baru git checkout -b bug2
,. Buat perubahan, komit, tunggu ulasan kode.
D < bug2
/
A-B < master
\
C < bug1
Mari kita berpura-pura bahwa orang lain melakukan E & F pada master saat Anda sedang menunggu peninjauan.
D < bug2
/
A-B-E-F < master
\
C < bug1
Ketika kode Anda disetujui, Anda dapat mengaktifkannya kembali untuk menguasainya dengan langkah-langkah berikut:
git checkout bug1
git rebase master
git checkout master
git merge bug1
Ini akan menghasilkan sebagai berikut:
D < bug2
/
A-B-E-F-C' < master, bug1
Kemudian Anda dapat mendorong, menghapus cabang bug1 lokal Anda, dan pergilah. Satu bug pada satu waktu di ruang kerja Anda, tetapi dengan menggunakan cabang lokal repositori Anda dapat menangani beberapa bug. Dan ini menghindari tarian panggung / simpanan yang rumit.
Jawab pertanyaan ctote di komentar:
Nah, Anda dapat kembali menyimpan untuk setiap bug, dan hanya bekerja dengan satu bug pada satu waktu. Atleast yang menyelamatkan Anda dari masalah pementasan. Tetapi setelah mencoba ini, saya pribadi merasa merepotkan. Stash agak berantakan dalam grafik log git. Dan yang lebih penting, jika Anda mengacaukan sesuatu, Anda tidak dapat kembali. Jika Anda memiliki direktori kerja yang kotor dan Anda menghapus simpanan, Anda tidak dapat "membatalkan" pop itu. Jauh lebih sulit untuk mengacaukan komitmen yang sudah ada.
Jadi git rebase -i
.
Ketika Anda rebase satu cabang ke cabang lain, Anda bisa melakukannya secara interaktif (flag -i). Ketika Anda melakukan ini, Anda memiliki opsi untuk memilih apa yang ingin Anda lakukan dengan setiap komit. Pro Git adalah buku yang luar biasa yang juga online dalam format HTML, dan memiliki bagian yang bagus tentang rebasing & squashing:
http://git-scm.com/book/ch6-4.html
Saya akan mencuri contoh kata demi kata mereka untuk kenyamanan. Berpura-puralah Anda memiliki riwayat komit berikut, dan Anda ingin rebase & squash bug1 ke master:
F < bug2
/
A-B-G-H < master
\
C-D-E < bug1
Inilah yang akan Anda lihat ketika Anda mengetik git rebase -i master bug1
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Untuk menekan semua komit dari cabang ke dalam komit tunggal, pertahankan komit pertama sebagai "pilih" dan ganti semua entri "pilih" selanjutnya dengan "squash" atau cukup "s". Anda akan mendapatkan kesempatan untuk mengubah pesan komit juga.
pick f7f3f6d changed my name a bit
s 310154e updated README formatting and added blame
s a5f4a0d added cat-file
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
Jadi ya, meremasnya agak menyebalkan, tapi saya masih akan merekomendasikannya karena terlalu banyak menggunakan simpanan.