Bagaimana cara saya memperbaiki cabang git yang salah?

Saya baru saja melakukan perbaikan besar pada cabang yang salah. Bagaimana saya bisa membatalkan komit terakhir di cabang utama saya, dan kemudian membuat perubahan yang sama dan mendapatkannya di cabang pembaruan saya?

414
31 мая '10 в 8:30 2010-05-31 08:30 ditetapkan oleh mikewilliamson pada 31 Mei '10 pukul 08:30 2010-05-31 08:30
@ 8 jawaban

Jika Anda belum mengklik perubahan Anda, Anda juga dapat melakukan soft reset:

 git reset --soft HEAD^ 

Ini akan mengembalikan komit, tetapi akan mengembalikan perubahan yang diperbaiki ke indeks Anda. Dengan asumsi bahwa cabang relatif modern relatif satu sama lain, git akan memungkinkan Anda untuk menjalankan pemeriksaan di cabang lain, setelah itu Anda dapat dengan mudah memperbaiki:

 git checkout branch git commit 

Kerugiannya adalah Anda harus memasukkan kembali pesan komit.

618
31 мая '10 в 8:53 2010-05-31 08:53 membalas Blair Holloway pada 31 Mei 2010 jam 8:53 2010-05-31 08:53

Jika Anda memiliki copy pekerjaan yang bersih (tidak dimodifikasi)

Kembalikan satu komit (pastikan Anda memeriksa hash komit untuk >

 git reset --hard HEAD^ 

Untuk mentransfer fiksasi ini ke cabang lain:

 git checkout other-branch git cherry-pick COMMIT-HASH 

Jika Anda berubah atau tidak melacak perubahan

Perhatikan juga bahwa git reset --hard akan mematikan semua perubahan yang tidak dapat git reset --hard dan dimodifikasi yang mungkin Anda miliki, jadi jika Anda memiliki yang Anda sukai:

 git reset HEAD^ git checkout . 
79
31 мая '10 в 8:33 2010-05-31 08:33 membalas Michael Mrozek pada 31 Mei 2010 jam 8:33 2010-05-31 08:33

4 tahun terlambat pada topik, tetapi mungkin bermanfaat bagi seseorang.

Jika Anda lupa membuat cabang baru sebelum Anda mengkomit dan mentransfer segalanya untuk dikuasai, tidak peduli berapa banyak yang telah Anda lakukan, pendekatan berikut ini lebih sederhana:

 git stash # skip if all changes are committed git branch my_feature git reset --hard origin/master git checkout my_feature git stash pop # skip if all changes were committed 

Sekarang cabang utama Anda adalah origin/master , dan semua komit baru ada di my_feature . Perhatikan bahwa my_feature adalah cabang lokal, bukan cabang jarak jauh.

61
06 февр. Jawabannya diberikan fotanus 06 Feb. 2014-02-06 17:44 '14 pada 17:44 2014-02-06 17:44

Jika Anda sudah melakukan perubahan, Anda harus memaksa yang berikutnya setelah mengatur u>

 git reset --hard HEAD^ git merge COMMIT_SHA1 git push --force 

Peringatan: hard reset akan membatalkan semua perubahan yang tertunda dalam copy pekerjaan Anda, sementara mendorong sepenuhnya akan menimpa keadaan cabang jarak jauh dengan keadaan cabang lokal saat ini.

Untuk jaga-jaga, pada Windows (menggunakan baris perintah Windows, bukan Bash), sebenarnya ada empat ^^^^ bukan satu, oleh karena itu

 git reset --hard HEAD^^^^ 
17
31 мая '10 в 9:11 2010-05-31 09:11 jawabannya diberikan oleh Igor Zevaka pada 31 Mei 2010 jam 9:11 2010-05-31 09:11

Baru-baru ini saya melakukan hal yang sama ketika saya secara tidak sengaja melakukan transisi ke master, ketika saya harus mengabdikan diri saya ke cabang lain. Tapi saya tidak mendorong apa pun.

Jika Anda baru saja membuat cabang yang salah dan tidak mengubah apa pun sejak saat itu dan belum mengklik repo, Anda dapat melakukan hal berikut:

 // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." 

CATATAN Pada contoh di atas, saya memutar u>

Selain itu, jika Anda telah selesai bekerja dengan cabang yang salah, dan juga selesai menulis kode lain, sebelum Anda menyadari bahwa Anda telah melakukan cabang yang salah, maka Anda dapat menggunakan simpanan git untuk menyimpan pekerjaan Anda yang belum selesai:

 // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop 

CATATAN Saya menggunakan situs ini sebagai tautan https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/

4
31 мая '17 в 0:51 2017-05-31 00:51 jawabannya diberikan oleh Ali Mizan pada 31 Mei '17 di 0:51 2017-05-31 00:51

Jadi, jika skrip Anda adalah bahwa Anda lulus master , tetapi dimaksudkan untuk meneruskan ke another-branch (yang mungkin atau mungkin belum ada), tetapi Anda belum mengklik, ini cukup mudah untuk diperbaiki.

 // if your branch doesn't exist, then add the -b argument git checkout -b another-branch git branch --force master origin/master 

Sekarang semua komitmen Anda untuk master akan berada di another-branch .

Sumber: http://haacked.com/archive/2015/06/29/git-migrate/

2
08 апр. Balas Lorcan O'Neill 08 Apr 2016-04-08 16:19 '16 pada 16:19 2016-04-08 16:19

Jika Anda mengalami masalah ini, dan Anda memiliki Visual Studio, Anda dapat melakukan hal berikut:

Klik kanan pada cabang Anda dan pilih View History :

2019

05 апр. jawabannya diberikan kepada Trevor 05 Apr 2017-04-05 02:39 '17 pada 2:39 2017-04-05 02:39

Jika cabang tempat Anda ingin menerapkan perubahan Anda sudah ada (misalnya, untuk mengembangkan cabang), ikuti instruksi yang diberikan oleh fotanus di bawah ini, kemudian:

 git checkout develop git rebase develop my_feature # applies changes to correct branch git checkout develop # 'cuz rebasing will leave you on my_feature git merge develop my_feature # will be a fast-forward git branch -d my_feature 

Dan, jelas, Anda bisa menggunakan tempbranch atau nama cabang lainnya, bukan my_feature jika Anda mau.

Selain itu, jika berlaku, tunda pesan munculan (berlaku) hingga Anda disatukan di cabang target Anda.

0
24 авг. jawabannya diberikan oleh fbicknel 24 Agustus. 2016-08-24 01:15 '16 pukul 1:15 pagi 2016-08-24 01:15

Pertanyaan lain tentang tag atau Ajukan Pertanyaan