Ini memberikan penjelasan yang baik tentang terjepitnya banyak komitmen:
http://git-scm.com/book/en/Git-Branching-Rebasing
tetapi tidak berfungsi untuk komit yang telah didorong. Bagaimana cara menekan beberapa commit terakhir di repo lokal dan jauh saya?
EDIT: Ketika saya melakukannya git rebase -i origin/master~4 master
, simpan yang pertama sebagai pick
, atur tiga lainnya sebagai squash
, dan kemudian keluar (melalui cx cc di emacs), saya mendapatkan:
$ git rebase -i origin/master~4 master
# Not currently on any branch.
nothing to commit (working directory clean)
Could not apply 2f40e2c... Revert "issue 4427: bpf device permission change option added"
$ git rebase -i origin/master~4 master
Interactive rebase already started
di mana 2f40 adalah pick
komit. Dan sekarang tidak ada dari 4 komit yang muncul git log
. Saya berharap editor saya akan dimulai kembali sehingga saya bisa memasukkan pesan komit. Apa yang saya lakukan salah?
git push --force origin master
git rebase -i origin/master
, dan benar-benar ingin tahu bagaimana cara mengembalikan berkomitmen lebih jauh dari itu, misalnyagit rebase -i origin/master~20 master
.+
hanya memaksa refspec yang diawali olehnya.--force
akan memaksa semua refspec didorong. Silakan lihat jawaban yang diperbarui.Di cabang saya bisa melakukannya seperti ini (untuk 4 komitmen terakhir)
sumber
Perbedaan kecil untuk jawaban yang diterima, tetapi saya mengalami banyak kesulitan terjepit dan akhirnya mendapatkannya.
esc --> :wq
Dorong ke remote menggunakan:
sumber
Banyak masalah dapat dihindari dengan hanya membuat
branch
untuk bekerja & tidak bekerjamaster
:git checkout -b mybranch
Pekerjaan berikut untuk
remote
komit sudah didorong & campuranremote
komit didorong /local
hanya komitmen:Saya juga punya beberapa catatan permintaan tarik yang mungkin bisa membantu.
sumber
git rebase -i master
Anda akan membuat editor vm terbuka dan pesan seperti ini
Di sini saya telah mengubah pick untuk semua commit lainnya ke "f" (Singkatan untuk fixup).
git push -f origin feature/feature-branch-name-xyz
ini akan memperbaiki semua komit ke satu komit dan akan menghapus semua komit lainnya. Saya melakukan ini dan itu membantu saya.
sumber
Saat Anda bekerja dengan Gitlab atau Github, Anda dapat mengalami masalah dengan cara ini. Anda menekan komitmen Anda dengan salah satu metode di atas. Pilihan saya adalah:
pilih squash atau fixup untuk komit Anda. Pada titik ini Anda akan memeriksa dengan status git. Dan pesannya bisa:
Dan Anda bisa tergoda untuk menariknya. JANGAN LAKUKAN ITU atau Anda akan berada dalam situasi yang sama seperti sebelumnya.
Alih-alih mendorong ke asal Anda dengan:
Tanda + memungkinkan untuk memaksa push hanya ke satu cabang.
sumber
Untuk meremukkan dua komit, yang salah satunya sudah didorong, pada cabang tunggal berikut ini berfungsi:
Secara default, ini akan mencakup pesan komit dari komit terbaru sebagai komentar pada komit yang lebih lama.
sumber
1)
git rebase -i HEAD~4
Untuk menguraikan: Ini berfungsi pada cabang saat ini; KEPALA ~ 4 berarti menekan empat commit terakhir; mode interaktif (-i)
2) Pada titik ini, editor membuka, dengan daftar commit, untuk mengubah commit kedua dan selanjutnya, mengganti pick dengan squash lalu menyimpannya.
output: Berhasil dibuat ulang dan diperbarui referensi / kepala / nama cabang.
3)
git push origin refs/heads/branch-name --force
keluaran:
sumber