Pertanyaan Batalkan gabungan Git yang belum didorong


Di dalam cabang guru saya, saya melakukan a git merge some-other-branch secara lokal, tetapi tidak pernah mendorong perubahan ke master asal. Saya tidak bermaksud untuk bergabung, jadi saya ingin membatalkannya. Saat melakukan git status setelah penggabungan saya, saya menerima pesan ini:

# On branch master
# Your branch is ahead of 'origin/master' by 4 commits.

Berdasarkan beberapa instruksi yang saya temukan, Saya mencoba berlari

git revert HEAD -m 1

tapi sekarang aku menerima pesan ini git status:

# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.

Saya tidak ingin cabang saya maju dengan sejumlah commit. Bagaimana saya kembali ke titik itu?


3075
2018-03-05 19:24


asal


Jawaban:


Dengan git reflog periksa commit mana yang sebelumnya digabung (git reflog akan menjadi opsi yang lebih baik daripada git log). Kemudian Anda dapat mengatur ulang menggunakan:

git reset --hard commit_sha

Ada juga cara lain

git reset --hard HEAD~1

akan membuat Anda kembali 1 commit.

Ketahuilah bahwa file yang dimodifikasi dan tidak diikat / tidak disalin akan disetel ulang ke status tidak dimodifikasi. Untuk menjaga mereka baik simpanan perubahan atau melihat --merge pilihan di bawah ini.


Seperti yang disarankan @Velmont di bawah ini dalam jawabannya, dalam kasus langsung ini menggunakan:

git reset --hard ORIG_HEAD

mungkin menghasilkan hasil yang lebih baik, karena harus mempertahankan perubahan Anda. ORIG_HEAD akan mengarah ke komit secara langsung sebelum penggabungan terjadi, jadi Anda tidak perlu memburu sendiri.


Tip lebih lanjut adalah menggunakan --merge beralih bukan --hard karena tidak mengatur ulang file yang tidak perlu:

--menggabungkan

Mengatur ulang indeks dan memperbarui file di pohon kerja yang berbeda antara <commit> dan HEAD, tetapi menyimpan yang berbeda antara indeks dan pohon kerja (yaitu yang memiliki perubahan yang belum ditambahkan).


3368
2018-03-05 19:34



Dengan asumsi tuan lokal Anda tidak di depan asal / master, Anda harus bisa melakukannya

git reset --hard origin/master

Maka lokal Anda master cabang harus terlihat sama origin/master.


1289
2018-03-17 18:06



Lihat bab 4 dalam buku Git dan posting asli oleh Linus Torvalds.

Untuk membatalkan penggabungan itu sudah didorong:

git revert -m 1 commit_hash

Pastikan untuk mengembalikan kembali jika Anda melakukan cabang lagi, seperti kata Linus.


1083
2018-06-02 16:31



Sungguh aneh bahwa perintah yang paling sederhana itu hilang. Sebagian besar jawaban berfungsi, tetapi membatalkan penggabungan yang baru saja Anda lakukan, ini adalah cara yang mudah dan aman:

git reset --merge ORIG_HEAD

Ref ORIG_HEAD akan menunjuk ke commit asli dari sebelum penggabungan.

(Itu --merge pilihan tidak ada hubungannya dengan penggabungan. Seperti itu saja git reset --hard ORIG_HEAD, tetapi lebih aman karena tidak menyentuh perubahan yang tidak terikat.)


831
2018-01-29 15:46



Dengan versi Git yang lebih baru, jika Anda belum melakukan penggabungan dan Anda memiliki konflik gabungan, Anda cukup melakukan:

git merge --abort

Dari man git merge:

[Ini] hanya bisa dijalankan setelah penggabungan menghasilkan konflik. git merge --abort akan membatalkan proses penggabungan dan mencoba merekonstruksi keadaan pra-penggabungan.


306
2018-02-12 02:13



Anda harus mengatur ulang ke commit sebelumnya. Ini seharusnya berfungsi:

git reset --hard HEAD^

Atau bahkan HEAD^^ untuk mengembalikan yang mengembalikan komit. Anda selalu dapat memberikan referensi SHA penuh jika Anda tidak yakin berapa banyak langkah yang harus Anda ambil.

Jika Anda mengalami masalah dan cabang master Anda tidak memiliki perubahan lokal, Anda dapat menyetel ulang origin/master.


104
2018-03-05 19:31



Akhir-akhir ini, saya telah menggunakan git reflog untuk membantu dengan ini. Ini kebanyakan hanya berfungsi jika penggabungan JUST terjadi, dan itu ada di komputer Anda.

git reflog mungkin mengembalikan sesuatu seperti:

fbb0c0f HEAD@{0}: commit (merge): Merge branch 'master' into my-branch
43b6032 HEAD@{1}: checkout: moving from master to my-branch
e3753a7 HEAD@{2}: rebase finished: returning to refs/heads/master
e3753a7 HEAD@{3}: pull --rebase: checkout e3753a71d92b032034dcb299d2df2edc09b5830e
b41ea52 HEAD@{4}: reset: moving to HEAD^
8400a0f HEAD@{5}: rebase: aborting

Baris pertama menunjukkan bahwa penggabungan terjadi. Baris kedua adalah waktu sebelum penggabungan saya. Saya hanya git reset --hard 43b6032 untuk memaksa cabang ini untuk melacak sebelum penggabungan, dan carry-on.


78
2017-12-19 17:51



Dengan Git modern, Anda dapat:

git merge --abort

Sintaks yang lebih tua:

git reset --merge

Sekolah tua:

git reset --hard

Tapi sebenarnya, perlu diperhatikan git merge --abort hanya setara dengan git reset --merge mengingat bahwa MERGE_HEAD hadir. Ini bisa dibaca di bantuan Git untuk menggabungkan perintah.

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

Setelah penggabungan gagal, ketika tidak ada MERGE_HEAD, penggabungan gagal dapat dibatalkan dengan git reset --merge, tetapi tidak harus dengan git merge --abort, jadi mereka tidak hanya sintaks lama dan baru untuk hal yang sama.

Secara pribadi saya temukan git reset --merge jauh lebih kuat dan berguna dalam pekerjaan sehari-hari, jadi itulah yang selalu saya gunakan.


42
2018-05-08 19:13