Saya memiliki 2 komitmen yang tidak saya dorong:
$ git status
# On branch master
# Your branch is ahead of 'faves/master' by 2 commits.
Bagaimana saya bisa mengembalikan yang pertama (yang tertua), tetapi menyimpan yang kedua?
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
Dari sini:
http://friendfeed.com/harijay/742631ff/git-question-how-do-i-rollback-commit-just-want
Apakah saya hanya perlu melakukan:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
Itu adalah?
Jawaban:
Cara teraman dan mungkin terbersih untuk dilakukan adalah rebase secara interaktif.
Atau,
Dari sana Anda dapat menekan komit, yang menempatkan satu atau lebih komit bersama ke dalam komit sebelumnya. Untuk menghapus komit sepenuhnya dari riwayat, hapus baris dari daftar.
Anda dapat mengembalikan komit dengan
git revert
tetapi akan menambahkan lebih banyak pesan komit ke riwayat, yang mungkin tidak diinginkan. Gunakan-n
parameter untuk memberi tahu Git untuk tidak langsung mengembalikannya. Anda dapat melakukan rebase secara interaktif dan memencetnya pada komit sebelumnya untuk menjaga semuanya tetap bersih.Jika kedua komit yang Anda kerjakan di sini memengaruhi file yang sama, Anda mungkin melihat konflik gabungan.
Mengatur ulang repositori dengan
git reset --hard
harus dilakukan dengan hati-hati, karena tidak dapat dibatalkan.Menulis ulang riwayat harus dilakukan dengan hati-hati.
sumber
rebase
sesedikit mungkin. Jika Anda bekerja dengan orang lain maka buat sajarevert
.Ini jika dari http://nakkaya.com/2009/09/24/git-delete-last-commit/ dan itu berhasil untuk saya
sumber
Nggak. git-reset --hard akan membawa Anda kembali ke sejarah. Apa yang Anda cari adalah git revert, yang akan membatalkan komitmen apa pun.
sumber
Saya baru saja melakukan ini:
Saya mengacaukannya jadi saya lakukan
Kemudian melakukannya lagi. Kemudian saya harus mendorong seperti ini:
Dan itu menghancurkan komit yang lebih baru daripada komit yang telah saya kembalikan. Bekerja dengan baik.
sumber
Tidak,
git reset --hard baf8d5e
akan menghapus3368e1c
komit dan KEPALA akan dibaf8d5e
sesudahnya.Jika Anda ingin menyimpan
3368e1c
komit dan menghapusbad8d5e
komit, solusi termudah adalah dengan melakukan "git rebase -i HEAD~2
" (yaitu rebase interaktif dari dua komit terakhir). Perintah ini akan meluncurkan editor pesan komit Anda dan Anda akan melihat satu baris untuk masing-masing dari dua komit terakhir. Di sana Anda cukup menghapusbad8d5e
garis komit dan menyimpan. git kemudian akan menulis ulang sejarah Anda dan komit ke-2 akan hilang.Ada perintah lain yang berguna yang dapat digunakan dalam editor pesan komit seperti
squash
,edit
, dll rebase Interaktif adalah sangat kuat!Jangan lakukan ini jika seseorang sudah melihat commit ini (dorong atau tarik dari repositori Anda)!
sumber
Mengacu pada komentar jtimberman tentang
git reset --hard
tidak dapat dibatalkan, itu tidak sepenuhnya benar. Lihat di sini: https://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1sumber
adalah satu-satunya cara untuk membatalkan komit jika hanya ada satu komit lainnya di repo (mis. komit awal dan 1 komit lebih). Sisa cara (kembalikan, rebase) menolak untuk bekerja, setidaknya pada git 1.7.5.1.
Jika Anda mengikuti
git reset
dengangit gc
git maka sebenarnya akan menghapus data komit lama dari repo sepenuhnya.sumber
Itu akan mengembalikan direktori dari "treeish" yang diberikan untuk / path / ke / dir
sumber
Saya dapat ini bekerja dengan mengedit secara manual kode hash dari commit terakhir dari file HEAD di dalam folder repositori:
Sebelum itu, saya tidak pernah bisa mendorong ke asal operasi UNMERGE yang saya lakukan secara lokal. Itu terus mengatakan itu "gagal mendorong beberapa referensi" ke Central Repository.
sumber