Git pull setelah upgrade paksa

Saya hanya menghancurkan beberapa commit dengan git rebase dan melakukan git push --force (ini jahat, saya tahu).

Sekarang coders lain memiliki cerita yang berbeda, dan ketika mereka melakukan git pull , git akan bergabung. Apakah ada cara untuk memperbaikinya, kecuali melakukan rm my-repo; git clone git@example.org:my-repo.git rm my-repo; git clone git@example.org:my-repo.git ?

Saya butuh sesuatu seperti kebalikan dari git push --force , tetapi git pull --force tidak menghasilkan hasil yang diharapkan.

175
22 марта '12 в 1:30 2012-03-22 01:30 iblue diatur 22 Maret '12 pada 1:30 pagi 2012-03-22 01:30
@ 2 balasan

Untuk mendapatkan komitmen baru

 git fetch 

Setel u>

Anda dapat mengatur u>git reset .

Untuk mengubah komit cabang lokal:

 git reset origin/master --hard 

Hati-hati, karena dokumen

Atur u>

Jika Anda ingin menyimpan semua perubahan yang Anda miliki secara lokal, lakukan --soft reset. yang memperbarui riwayat komit untuk cabang, tetapi tidak mengubah file apa pun di direktori kerja (dan Anda bisa memperbaikinya).

Rebase

Anda dapat memainkan komit lokal Anda di atas kait / cabang lain menggunakan git rebase

 git rebase -i origin/master 

Ini akan memicu pengalihan online, di mana Anda dapat memilih cara menggunakan setiap individu komit yang tidak ada dalam cerita yang Anda susun u>

Jika Anda menghapus (menggunakan git push -f ) yang dihapus dalam sejarah lokal, mereka akan terdaftar sebagai komit untuk diterapkan kembali - mereka harus dihapus sebagai bagian dari rebase atau mereka hanya akan dimasukkan kembali dalam sejarah untuk cabang - dan lagi muncul di riwayat yang dihapus saat Anda mengklik berikutnya.

Gunakan git command --help help untuk informasi dan contoh yang lebih terperinci pada salah satu dari perintah di atas (atau lainnya).

293
22 марта '12 в 1:36 2012-03-22 01:36 jawabannya diberikan AD7six 22 Maret '12 pada 1:36 2012-03-22 01:36

Ini tidak akan memperbaiki cabang yang sudah memiliki kode yang tidak Anda perlukan (lihat di bawah untuk cara melakukannya), tetapi jika mereka menarik beberapa cabang dan sekarang mereka ingin itu menjadi bersih (dan tidak "di depan" dari asal / beberapa cabang), maka Anda cukup:

 git checkout some-branch # where some-branch can be replaced by any other branch git branch base-branch -D # where base-branch is the one with the squashed commits git checkout -b base-branch origin/base-branch # recreating branch with correct commits 

Catatan Anda dapat menggabungkan semua ini dengan menempatkan di antara keduanya.

Note2: Florian menyebutkan ini di komentar, tetapi siapa yang membaca komentar ketika mencari jawaban?

Note3: Jika Anda memiliki cabang yang terinfeksi, Anda bisa membuat yang baru berdasarkan "cabang diam" yang baru dan hanya mengu>

Contoh:

 git checkout feature-old # some branch with the extra commits git log # gives commits (write down the id of the ones you want) git checkout base-branch # after you have already cleaned your local copy of it as above git checkout -b feature-new # make a new branch for your feature git cherry-pick asdfasd # where asdfasd is one of the commit ids you want # repeat previous step for each commit id git branch feature-old -D # delete the old branch 

Sekarang fitur baru - cabang Anda tanpa komitmen tambahan (mungkin buruk)!

8
29 авг. Balas Tom Prats 29 Agt 2013-08-29 19:32 '13 pada 19:32 2013-08-29 19:32

Pertanyaan lain tentang tag atau Ajukan Pertanyaan