Saya mengalami sedikit masalah di sini: Saya punya cabang khusus masalah 28s
di Git, yang saya gabungkan di develop
cabang umum . Ternyata saya melakukannya terlalu cepat, jadi saya menggunakan git-revert untuk membatalkan penggabungan. Sekarang, bagaimanapun, waktunya telah datang untuk menggabungkan 28s
ke dalam develop
, tetapi perintah git-merge melihat penggabungan asli, dan dengan senang hati mengumumkan bahwa semuanya baik-baik dan cabang telah sudah bergabung. Apa yang saya lakukan sekarang? Buat komit 'Kembalikan "Kembalikan" 28s -> mengembangkan ""? Tampaknya bukan cara yang baik untuk melakukannya, tetapi saya tidak bisa membayangkan yang lain saat ini.
Seperti apa bentuk struktur pohon:
git
git-merge
git-revert
Toms Mikoss
sumber
sumber
Jawaban:
Anda harus "mengembalikan pengembalian". Tergantung pada Anda bagaimana mengembalikan aslinya, mungkin tidak semudah kedengarannya. Lihatlah dokumen resmi tentang topik ini .
untuk memungkinkan:
sumber
Anggaplah Anda memiliki sejarah seperti itu
Di mana A, B gagal melakukan dan W - adalah pengembalian dari M
Jadi sebelum saya mulai memperbaiki masalah yang ditemukan, saya memilih cherry-pick dari commit ke cabang saya
Lalu saya mengembalikan W commit di cabang saya
Setelah itu saya bisa terus memperbaiki.
Sejarah terakhir bisa terlihat seperti:
Ketika saya mengirim PR, itu akan dengan jelas menunjukkan bahwa PR tidak dapat dikembalikan dan menambahkan beberapa komitmen baru.
sumber
Untuk mengembalikan kembali tanpa mengacaukan alur kerja Anda terlalu banyak:
Cabang fitur Anda sekarang harus dapat digabung seperti biasa ketika Anda siap untuk itu. Satu-satunya downside di sini adalah bahwa Anda akan memiliki beberapa komitmen gabungan / pengembalian dalam sejarah Anda.
sumber
Untuk mengembalikan kembali di GIT:
sumber
Alih-alih menggunakan
git-revert
Anda bisa menggunakan perintah ini didevel
cabang untuk membuang (membatalkan) komit gabungan yang salah (bukan hanya mengembalikannya).Ini juga akan menyesuaikan isi direktori kerja sesuai. Hati-hati :
git-reset
. Semua dilakukan setelah yang Anda tentukan sebagaigit reset
argumen akan hilang!Saya merekomendasikan untuk mempelajari
git-reset
manual dengan seksama sebelum mencoba ini.Sekarang, setelah reset Anda dapat menerapkan kembali perubahan Anda di
devel
kemudian lakukanIni akan menjadi penggabungan nyata dari
28s
menjadidevel
seperti yang awal (yang sekarang terhapus dari sejarah git).sumber
reset --hard
danpush origin
. Ketahuilah bahwa dorongan kekuatan ke asalnya mungkin benar-benar membuat PR terbuka di GitHub.Saya baru saja menemukan posting ini ketika menghadapi masalah yang sama. Saya menemukan cara di atas menakutkan untuk melakukan reset hards dll. Saya akhirnya akan menghapus sesuatu yang saya tidak mau, dan tidak akan bisa mendapatkannya kembali.
Sebaliknya aku memeriksa komit saya ingin cabang untuk kembali ke misalnya
git checkout 123466t7632723
. Kemudian dikonversi ke cabanggit checkout my-new-branch
. Saya kemudian menghapus cabang yang tidak saya inginkan lagi. Tentu saja ini hanya akan berhasil jika Anda dapat membuang cabang yang Anda rusak.sumber
git reflog
akan melindungi Anda pada hard reset selama beberapa bulan jika Anda kemudian menemukan bahwa Anda membutuhkan komitmen yang hilang. Reflog terbatas pada repo lokal Anda.Saya akan menyarankan Anda untuk mengikuti langkah-langkah di bawah ini untuk memulihkan kembali, katakan SHA1.
Sekarang buat PR untuk cabang
users/yourname/revertOfSHA1
sumber
Pada titik ini Anda akan memiliki cabang 'kembangkan' yang bersih tempat Anda dapat menggabungkan fitur brach Anda seperti yang biasa Anda lakukan.
sumber