Cara menghapus komit dari permintaan penarikan


105

Saya melakukan permintaan tarik tetapi setelah itu saya membuat beberapa komitmen pada proyek secara lokal yang berakhir mencemari permintaan tarik saya, saya mencoba untuk menghapusnya tetapi tidak berhasil.

Saya menemukan beberapa pertanyaan serupa di StackOverflow tetapi saya tidak dapat menerapkan apa yang ada di sana. Ini permintaan tarik pertama saya di GitHub jadi agak aneh bagi saya bagaimana semua ini bekerja.

Komit yang disorot adalah yang saya perlukan untuk menyimpan dan menghapus semua hal lainnya. Itu menjadi komit keempat dalam sejarah karena saya membuat beberapa barang penggabungan.

masukkan deskripsi gambar di sini

log git saya masukkan deskripsi gambar di sini

Bisakah seseorang menjelaskan apa yang terjadi dan bagaimana cara memperbaiki masalah ini?


2
Anda perlu melakukan rebase , dan hanya "memilih" commit "yang ditambahkan dari github" (yaitu mengomentari baris untuk setiap commit lainnya)
Robbie Averill

1
rebase cabang apa ke cabang apa yang bisa Anda tambahkan penjelasan lebih lanjut.
humazed

what branch= cabang yang Anda kerjakan, onto what branch= cabang yang Anda minta
Robbie Averill

Saya menjelaskan apa yang diisyaratkan oleh @Robbie Averill dalam jawaban saya. Aneh bahwa tidak ada yang menulis jawaban untuk menjelaskan hal ini sampai sekarang.
ferit

Jawaban:


109

Anda memiliki beberapa teknik untuk melakukannya.

Posting ini - baca bagian tentang pengembalian akan menjelaskan secara rinci apa yang ingin kita lakukan dan bagaimana melakukannya.

Inilah solusi paling sederhana untuk masalah Anda:

# Checkout the desired branch
git checkout <branch>

# Undo the desired commit
git revert <commit>

# Update the remote with the undo of the code
git push origin <branch>

Perintah revert akan membuat komit baru dengan pengurungan komit asli.


2
Apakah ini berfungsi bahkan ketika kami memisahkan proyek dari orang lain dan ingin menghapus beberapa komentar di pull request?
Dr. jacky

110

Orang tidak ingin melihat komit yang salah dan komit balik untuk mengurungkan perubahan dari komit yang salah. Ini mencemari sejarah komit.

Berikut ini cara sederhana untuk menghapus komit yang salah alih-alih membatalkan perubahan dengan komit balik.

  1. git checkout my-pull-request-branch

  2. git rebase -i HEAD~n// di mana njumlah komit terakhir yang ingin Anda sertakan dalam rebase interaktif.

  3. Ganti pickdengandrop untuk komitmen yang ingin Anda buang.
  4. Simpan dan keluar.
  5. git push --force

8
ini bekerja untuk saya seperti pesona. Saya memiliki banyak komitmen yang seharusnya tidak ada di PR. Saya hanya mendasarkannya kembali secara interaktif, melepaskan komitmen tersebut dan mendorongnya kembali
FullStackEngineer

1
Anda harus menyinkronkan dengan master jarak jauh sebelum memulai pr, bukan?
ferit

5
Untuk mendorong aku harus melakukan: git push origin HEAD:myBranch --force. Tapi sebaliknya hebat dan bermanfaat.
ScottyBlades

4
Ini juga berguna ketika Anda ingin memperbaiki PR terbuka di GitHub, Anda hanya perlu dapat melakukan dorongan paksa
Vladimir Hidalgo

1
@jorijnsmit yang mereka maksud setelah dijalankan git rebase -i HEAD~<n>, di bagian atas file akan ada <n>baris komit, dengan setiap baris berisi teks pick <commit id>. Komit default ke pick, jadi untuk setiap komit yang ingin Anda hapus, ubah teks pickmenjadidrop
Slim

6

Jika Anda menghapus komit dan tidak ingin menyimpan perubahannya, @ferit memiliki solusi yang baik.

Jika Anda ingin menambahkan komit tersebut ke cabang saat ini, tetapi tidak masuk akal untuk menjadi bagian dari pr saat ini, Anda dapat melakukan hal berikut:

  1. menggunakan git rebase -i HEAD~n
  2. Tukar komit yang ingin Anda hapus ke posisi paling bawah (terbaru)
  3. Simpan dan keluar
  4. gunakan git reset HEAD^ --softuntuk membatalkan komitmen perubahan dan mengembalikannya ke status bertahap.
  5. gunakan git push --forceuntuk memperbarui cabang jarak jauh tanpa komit yang Anda hapus.

Sekarang Anda telah menghapus komit dari jarak jauh Anda, tetapi masih memiliki perubahan secara lokal.


2

Jadi lakukan hal berikut,

Katakanlah nama cabang Anda adalah my_branch dan ini memiliki komit ekstra.

  1. git checkout -b my_branch_with_extra_commits (Menjaga cabang ini disimpan dengan nama yang berbeda)
  2. gitk (Buka konsol git)
  3. Cari komitmen yang ingin Anda pertahankan. Salin SHA komit itu ke notepad.
  4. git checkout my_branch
  5. gitk (Ini akan membuka konsol git)
  6. Klik kanan pada komit yang ingin Anda kembalikan (Sebutkan sebelum perubahan Anda) dan klik "reset branch to here "
  7. Lakukan git pull --rebase origin branch_name_to _merge_to
  8. git cherry-pick <SHA you copied in step 3. >

Sekarang lihat sejarah komit cabang lokal dan pastikan semuanya terlihat bagus.


0

Inilah yang membantu saya:

  1. Buat cabang baru dengan yang sudah ada. Mari kita sebut yang sudah ada branch_olddan yang baru sebagai branch_new.

  2. Setel ulang branch_new ke keadaan stabil, ketika Anda tidak memiliki masalah apapun lakukan sama sekali. Misalnya, untuk meletakkannya di level master lokal Anda, lakukan hal berikut:

    git reset —hard master git push — force origin

  3. cherry-pickkomit dari branch_oldhinggabranch_new

  4. git push
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.