Pertanyaan Hapus komit dari cabang di Git


Saya ingin tahu cara menghapus komit.

Oleh deleteMaksud saya, seolah-olah saya tidak membuat komitmen itu, dan ketika saya melakukan push di masa depan, perubahan saya tidak akan mendorong ke cabang terpencil.

Saya membaca bantuan git, dan saya pikir perintah yang harus saya gunakan adalah git reset --hard HEAD. Apakah ini benar?


2574
2017-08-27 03:39


asal


Jawaban:


Cermat:  git reset --hard  AKAN MENGHAPUS PERUBAHAN DIRECTORY KERJA ANDA. Pastikan untuk menyimpan semua perubahan lokal yang ingin Anda simpan sebelum menjalankan perintah ini.

Dengan anggapan Anda duduk di atas komit itu, maka perintah ini akan menghempaskannya ...

git reset --hard HEAD~1

Itu HEAD~1 berarti komit sebelum kepala.

Atau, Anda bisa melihat output dari git log, temukan id komit dari komitmen yang ingin Anda cadangkan, lalu lakukan ini:

git reset --hard <sha1-commit-id>

Jika Anda sudah mendorongnya, Anda harus melakukan dorongan gaya untuk menyingkirkannya ...

git push origin HEAD --force

Namun, jika orang lain mungkin telah menariknya, maka Anda akan lebih baik memulai cabang baru. Karena ketika mereka menarik, itu hanya akan menggabungkannya ke dalam pekerjaan mereka, dan Anda akan mendapatkannya didorong kembali lagi.

Jika Anda sudah mendorong, mungkin lebih baik digunakan git revert, untuk membuat "mirror image" commit yang akan membatalkan perubahan. Namun, kedua komit akan ada di log.


FYI - git reset --hard HEAD sangat bagus jika Anda ingin membuang WORK IN PROGRESS. Ini akan mengatur ulang Anda kembali ke commit terbaru, dan menghapus semua perubahan dalam pohon kerja dan indeks Anda.


Terakhir, jika Anda perlu menemukan komit yang Anda "hapus", itu biasanya hadir git reflog kecuali Anda memiliki sampah yang dikumpulkan repositori Anda.


3305
2017-08-27 03:44



Jika Anda belum menekan commit di mana saja, Anda bisa menggunakannya git rebase -i untuk menghapus komit itu. Pertama, cari tahu sejauh mana komitmen itu (kira-kira). Kemudian lakukan:

git rebase -i HEAD~N

Itu ~N berarti rebase yang terakhir N melakukan (N harus berupa angka, misalnya HEAD~10). Kemudian, Anda dapat mengedit file yang diberikan Git kepada Anda untuk menghapus commit yang melanggar. Saat menyimpan file itu, Git akan menulis ulang semua commit berikut seolah-olah yang Anda hapus tidak ada.

Buku Git punya yang bagus bagian tentang rebase dengan gambar dan contoh.

Hati-hati dengan ini, karena jika Anda mengubah sesuatu yang Anda memiliki didorong di tempat lain, pendekatan lain akan diperlukan kecuali Anda berencana untuk melakukan dorongan gaya.


603
2017-08-27 03:51



Kemungkinan lain adalah salah satu perintah favorit pribadi saya:

git rebase -i <commit>~1

Ini akan memulai rebase dalam mode interaktif -i pada titik tepat sebelum komit yang Anda ingin mendera. Editor akan mulai mendaftarkan semua commit sejak saat itu. Hapus baris yang berisi commit yang ingin Anda abaikan dan simpan file. Rebase akan melakukan sisa pekerjaan, menghapus hanya yang melakukan, dan memutar semua yang lain kembali ke log.


416
2017-08-27 03:49



Saya menambahkan jawaban ini karena saya tidak melihat mengapa orang yang baru saja mencoba melakukan pekerjaan ingin menghapus semua pekerjaan itu karena beberapa kesalahan menggunakan Git!

Jika Anda ingin mempertahankan pekerjaan Anda dan hanya 'membatalkan' perintah komit (Anda tertangkap sebelum mendorong untuk repo):

git reset --soft HEAD~1

Jangan gunakan --hard bendera kecuali Anda ingin menghancurkan pekerjaan Anda yang sedang berlangsung sejak commit terakhir.


281
2017-10-15 18:17



Jika Anda tidak mempublikasikan perubahan, untuk menghapus komit terbaru, Anda dapat melakukannya

$ git reset --hard HEAD^

(Perhatikan bahwa ini juga akan menghapus semua perubahan yang tidak terikat; gunakan dengan hati-hati).

Jika Anda sudah menerbitkan perintah yang akan dihapus, gunakan git kembali

$ git revert HEAD

47
2017-08-27 10:47



Menghapus seluruh komitmen

git rebase -p --onto SHA^ SHA

Jelas mengganti "SHA" dengan referensi yang ingin Anda singkirkan. The "^" dalam perintah itu adalah harfiah.

http://sethrobertson.github.io/GitFixUm/fixup.html


43
2017-08-31 19:36



git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId merujuk yang ingin Anda kembalikan


33
2017-10-16 09:51



Jika Anda ingin memperbaiki commit terbaru Anda, Anda dapat membatalkan commit, dan membuka file di dalamnya, dengan melakukan:

git reset HEAD~1

Ini akan mengembalikan repositori Anda ke kondisi sebelum git menambahkan perintah yang mementaskan file. Perubahan Anda akan ada di direktori kerja Anda. HEAD ~ 1 mengacu pada komit di bawah ujung cabang saat ini.

Jika Anda ingin memulai komit N, tetapi simpan perubahan kode di direktori kerja Anda:

git reset HEAD~N

Jika Anda ingin menyingkirkan commit terakhir Anda, dan tidak ingin menyimpan perubahan kode, Anda dapat melakukan reset "keras".

git reset --hard HEAD~1

Demikian juga, jika Anda ingin membuang N terakhir, dan tidak ingin menyimpan perubahan kode:

git reset --hard HEAD~N

29
2018-05-31 07:19



Memaksimalkan Riwayat

Dengan asumsi Anda tidak hanya ingin menghapus commit terakhir, tetapi Anda ingin menghapus komit spesifik dari n commit terakhir, ikuti:

git rebase -i HEAD~<number of commits to go back>, jadi git rebase -i HEAD~5 jika Anda ingin melihat lima commit terakhir.

Kemudian di editor teks ubah kata pick untuk drop di samping setiap komitmen yang ingin Anda hapus. Simpan dan keluar dari editor. Voila!

Riwayat Perubahan Tambahan

Mencoba git revert <commit hash>. Kembali akan membuat baru melakukan yang membatalkan komitmen yang ditentukan.


20
2018-06-15 23:01



Katakanlah kita ingin menghapus komit 2 & 4 dari repo.

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

catatan: Anda harus memiliki hak admin atas repo karena Anda gunakan --hard dan -f.

  • git checkout b3d92c5 Memeriksa komitmen terakhir yang dapat digunakan.
  • git checkout -b repair Buat cabang baru untuk dikerjakan.
  • git cherry-pick 77b9b82 Jalankan melalui commit 3.
  • git cherry-pick 2c6a45b Jalankan melalui komitmen 1.
  • git checkout master Tuan Checkout.
  • git reset --hard b3d92c5 Setel ulang master menjadi komit terakhir yang dapat digunakan.
  • git merge repair Gabungkan cabang baru kami ke master.
  • git push -f origin master Dorong master ke repo jarak jauh.

19
2017-09-05 07:19



git rebase -i HEAD~2

Di sini '2' adalah jumlah commit yang ingin Anda rebase.

'git rebase -i HEAD`

jika Anda ingin me-rebase semua commit.

Maka Anda akan dapat memilih salah satu dari opsi ini.

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

Garis-garis ini dapat diurutkan ulang; mereka dieksekusi dari atas ke bawah.  Jika Anda menghapus baris di sini KOMIT bahwa AKAN HILANG.  Namun, jika Anda menghapus semuanya, rebase akan dibatalkan.  Perhatikan bahwa komit kosong dikomentari

Anda dapat dengan mudah menghapus commit yang menggunakan opsi "d" atau Menghapus baris yang memiliki commit Anda.


14
2018-05-18 23:39