Sourcetree - batalkan komitmen yang tidak dicorat


208

Saya menggunakan Sourcetree untuk Windows untuk repositori git dan ingin membatalkan komit yang tidak dicuri.

Apakah itu mungkin? Jika saya "mengembalikan komit", itu membuat komit kedua yang mengembalikan komit pertama, tapi saya tidak ingin komit pertama muncul sama sekali dalam kontrol sumber saya.

Saya juga bisa menghapus repositori lokal saya dan menariknya lagi tanpa komit lokal saya, tetapi mungkin ada cara lain?


Saya telah menulis artikel terperinci dengan tangkapan layar. Berbagi dengan harapan dapat membantu: attosol.com/undo-in-git-using-sourcetree
Rahul Soni

Jawaban:


345
  1. Klik kanan pada komit yang ingin Anda atur ulang (bukan yang ingin Anda hapus!)
  2. Pilih "Reset master ke komit ini"
  3. Pilih reset "Lunak".

Reset lunak akan menjaga perubahan lokal Anda.

Sumber: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

Edit

Tentang git revert: Perintah ini menciptakan komit baru yang akan membatalkan komit lainnya. Misal jika Anda memiliki komit yang menambahkan file baru,git revert dapat digunakan untuk membuat komit yang akan menghapus file baru.

Tentang menerapkan soft reset: Asumsikan Anda memiliki komit Ake E( A---B---C---D---E) dan Anda ingin menghapus komit terakhir ( E). Kemudian Anda dapat melakukan soft reset untuk melakukan D. Dengan soft reset komit Eakan dihapus dari git tetapi perubahan lokal akan disimpan. Ada lebih banyak contoh dalam dokumentasi reset git .


34
Atau jika Anda sedang mengerjakan cabang - "Setel ulang cabang saat ini ke komit ini"
Tom Auger

5
Saya sangat tidak mengerti penjelasan UI ini ... Atur ulang cabang saat ini ke komit ini sehingga tidak terdengar seperti itu akan menghapus komit. Dan akhirnya melakukan apa yang Anda harapkan lebih. Ini mereset copy pekerjaan saya ke komit, daripada menghapusnya.
MrFox

Saya setuju dengan @MrFox. Setelah saya melakukan ini, komit yang saya tidak inginkan masih ditampilkan di pohon.
Timmmm

@Timmmm: Apakah penjelasan baru membantu?
nightlyop

Sebenarnya saya menyadari bahwa saya sudah mendorong komit saya ke github. Saya menemukan sebuah artikel yang menjelaskan cara "menulis ulang sejarah" tetapi sepertinya ini lebih merepotkan daripada nilainya!
Timmmm

46

Jika Anda memilih entri log yang ingin Anda kembalikan, Anda dapat mengklik "Setel ulang ke komit ini". Gunakan hanya opsi ini jika Anda tidak mendorong perubahan komit terbalik. Jika Anda khawatir kehilangan perubahan maka Anda dapat menggunakan mode lunak yang akan meninggalkan serangkaian perubahan yang tidak dikomit (yang baru saja Anda ubah). Menggunakan campuran me-reset copy pekerjaan tetapi menyimpan perubahan-perubahan itu, dan hard hanya akan menyingkirkan perubahan sepenuhnya. Berikut beberapa tangkapan layar:

masukkan deskripsi gambar di sini


3
Jika Anda masih melihat ikon yang menunjukkan Push tersedia dari komit Anda sebelumnya (Yang baru saja Anda hapus), tarik dan Sourcetree tampaknya memperbarui UI.
ChristoKiwi

6

Jika Anda ingin menghapus komit, Anda dapat melakukannya sebagai bagian dari rebase interaktif. Tetapi lakukan dengan hati-hati, sehingga Anda tidak mengacaukan repo Anda.

Dalam Sourcetree:

  1. Klik kanan komit yang lebih tua dari komit yang ingin Anda hapus, dan pilih " Rebase anak-anak xxxx secara interaktif ... ". Yang Anda klik akan menjadi "basis" Anda dan Anda dapat membuat perubahan untuk setiap komit yang dibuat setelah itu.
  2. Di jendela baru, pilih komit yang Anda inginkan, dan tekan tombol " Hapus " di bagian bawah, atau klik kanan komit dan klik " Hapus komit ".
  3. Klik " OK " (atau " Batal " jika Anda ingin membatalkan).

Lihat posting blog Atlassian ini untuk informasi lebih lanjut tentang rebasing interaktif di Sourcetree.


Ini adalah jawaban yang saya cari, bekerja sesuai kebutuhan.
Cliff Burton

0

Jika Anda berada di cabang lain, Anda harus terlebih dahulu "memeriksa komit ini" untuk komit yang ingin Anda hapus, dan hanya kemudian "setel ulang cabang saat ini ke komit ini" dengan memilih komit wright sebelumnya, akan berfungsi.

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.