Saya baru saja membuat komitmen yang sangat baik ke cabang yang salah. Bagaimana cara membatalkan komit terakhir di cabang master saya dan kemudian mengambil perubahan yang sama dan memasukkannya ke cabang upgrade saya?
git
git-commit
mikewilliamson
sumber
sumber
git reset --soft HEAD\^
4 tahun terlambat pada topik, tetapi ini mungkin bermanfaat bagi seseorang.
Jika Anda lupa membuat cabang baru sebelum melakukan dan melakukan semua pada master, tidak peduli berapa banyak yang Anda lakukan, pendekatan berikut lebih mudah:
Sekarang Anda memiliki cabang utama Anda sama dengan
origin/master
dan semua komit baru aktifmy_feature
. Perhatikan bahwa itumy_feature
adalah cabang lokal, bukan cabang jarak jauh.sumber
master
, lalu mengatur ulangmaster
keorigin/master
.origin/master
sudah ada di komit yang ingin Anda atur ulang! Namun kredit untuk tipnya adalah halaman ini: github.com/blog/…Jika Anda memiliki copy pekerjaan yang bersih (tidak dimodifikasi)
Untuk mengembalikan satu komit (pastikan Anda mencatat hash komit untuk langkah selanjutnya):
Untuk menarik komit itu ke cabang lain:
Jika Anda telah memodifikasi atau membatalkan perubahan
Perhatikan juga bahwa
git reset --hard
akan membunuh perubahan yang tidak terlacak dan dimodifikasi yang mungkin Anda miliki, jadi jika Anda memilikinya, Anda mungkin lebih suka:sumber
git rev-parse BRANCH_NAME
untuk mendapatkan sha.git reflog show <branch>
!git stash
sebelum reset dan menggunakangit stash pop
setelahnya untuk mengembalikannya, jadi tidak perlu takut pada--hard
bagian tersebutJika Anda sudah mendorong perubahan, Anda harus memaksakan dorongan berikutnya setelah menyetel ulang HEAD.
Peringatan: hard reset akan membatalkan setiap modifikasi yang tidak dikomit dalam copy pekerjaan Anda, sementara push force akan sepenuhnya menimpa keadaan cabang jarak jauh dengan keadaan cabang lokal saat ini.
Untuk jaga-jaga, pada Windows (menggunakan baris perintah Windows, bukan Bash) sebenarnya empat
^^^^
bukan satu, jadi itusumber
git reset --hard COMMIT_HASH
git push --force
Baru-baru ini saya melakukan hal yang sama, di mana saya secara tidak sengaja melakukan perubahan untuk menguasai, ketika saya seharusnya berkomitmen pada cabang lain. Tapi saya tidak mendorong apa pun.
Jika Anda baru saja berkomitmen ke cabang yang salah, dan belum mengubah apa pun sejak itu, dan belum mendorong ke repo, maka Anda dapat melakukan hal berikut:
CATATAN: pada contoh di atas, saya memutar ulang 1 commit dengan git reset HEAD ~ 1. Tetapi jika Anda ingin memundurkan n komit, maka Anda dapat melakukan git reset HEAD ~ n.
Juga, jika Anda akhirnya melakukan ke cabang yang salah, dan juga akhirnya menulis beberapa kode sebelum menyadari bahwa Anda berkomitmen pada cabang yang salah, maka Anda bisa menggunakan git simpanan untuk menyimpan pekerjaan Anda yang sedang dalam proses:
CATATAN: Saya menggunakan situs web ini sebagai referensi https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/
sumber
git checkout -b new_branch
benar dari sana, melakukan yang utuh, hanya mendorong, dan menciptakan PR, bukan t harus berkomitmen lagi.Jadi, jika skenario Anda adalah komitmen Anda
master
tetapi dimaksudkan untuk berkomitmenanother-branch
(yang mungkin atau tidak mungkin belum ada) tetapi Anda belum mendorongnya, ini cukup mudah untuk diperbaiki.Sekarang semua komitmen Anda
master
akan aktifanother-branch
.Berasal dari cinta dari: http://haacked.com/archive/2015/06/29/git-migrate/
sumber
another-branch
sudah ada. Dalam hal ini, itu hanya membatalkan komitmen yang saya buat untuk dikuasai dan tidak memakainyaanother-branch
.Untuk menguraikan jawaban ini , jika Anda memiliki beberapa komitmen untuk berpindah, misalnya
develop
kenew_branch
:sumber
Jika Anda mengalami masalah ini dan Anda memiliki Visual Studio, Anda dapat melakukan hal berikut:
Klik kanan pada cabang Anda dan pilih
View History
:Klik kanan pada komit yang ingin Anda kembali. Dan Kembalikan atau Atur Ulang sesuai kebutuhan.
sumber
Untuk banyak komit di cabang yang salah
Jika untuk Anda, ini hanya sekitar 1 komit, maka ada banyak solusi pengaturan ulang lainnya yang lebih mudah. Bagi saya, saya memiliki sekitar 10 komitmen yang dibuat secara tidak sengaja
master
alih-alih, sebut sajabranch_xyz
, dan saya tidak ingin kehilangan riwayat komit.Apa yang dapat Anda lakukan, dan apa yang menyelamatkan saya menggunakan jawaban ini sebagai referensi, menggunakan proses 4 langkah, yaitu -
master
branch_xyz
master
Berikut langkah-langkah di atas dalam rincian -
Buat cabang baru dari
master
(tempat saya secara tidak sengaja melakukan banyak perubahan)Catatan:
-b
flag digunakan untuk membuat cabang baru.Hanya untuk memverifikasi jika kita mendapatkan ini dengan benar, saya akan melakukan cepat
git branch
untuk memastikan kita berada ditemp_branch_xyz
cabang dangit log
untuk memeriksa apakah kita memiliki komit yang benar.Gabungkan cabang sementara ke cabang yang awalnya dimaksudkan untuk komit, yaitu
branch_xyz
.Pertama, beralih ke cabang asli yaitu
branch_xyz
(Anda mungkin perlugit fetch
jika Anda belum)Catatan: Tidak menggunakan
-b
flagSekarang, mari gabungkan cabang sementara ke cabang yang saat ini kami checkout
branch_xyz
Anda mungkin harus mengurus beberapa konflik di sini, jika ada. Anda dapat mendorong (saya akan) atau melanjutkan ke langkah berikutnya, setelah berhasil menggabungkan.
Batalkan yang tidak disengaja berkomitmen
master
menggunakan jawaban ini sebagai referensi, pertama beralih kemaster
kemudian batalkan semuanya kembali untuk mencocokkan remote (atau untuk komit tertentu, jika Anda mau)
Sekali lagi, saya akan melakukan
git log
sebelum dan sesudah hanya untuk memastikan bahwa perubahan yang dimaksudkan mulai berlaku.Menghapus bukti, yaitu menghapus cabang sementara. Untuk ini, pertama-tama Anda perlu checkout cabang yang temp digabungkan, yaitu
branch_xyz
(Jika Anda tetapmaster
dan menjalankan perintah di bawah ini, Anda mungkin mendapatkan aerror: The branch 'temp_branch_xyz' is not fully merged
), jadi mari kitadan kemudian hapus bukti kecelakaan ini
Ini dia.
sumber
Jika cabang tempat Anda ingin menerapkan perubahan Anda sudah ada (cabang berkembang , misalnya), ikuti instruksi yang disediakan oleh fotanus di bawah ini, kemudian:
Dan jelas Anda bisa menggunakan tempbranch atau nama cabang lain, bukan my_feature jika Anda mau.
Juga, jika berlaku, tunda pop up (berlaku) sampai setelah Anda bergabung di cabang target Anda.
sumber
Bagi saya, ini diselesaikan dengan mengembalikan komit yang saya dorong, lalu memetik ceri yang komit ke cabang lain.
Anda dapat menggunakan
git log
untuk menemukan hash yang benar, dan Anda dapat mendorong perubahan ini kapan pun Anda mau!sumber