Saya telah membuat beberapa commit pada file yang berbeda, tetapi sejauh ini saya ingin mendorong repositori jarak jauh saya hanya komit tertentu.
Apakah itu mungkin?
Saya telah membuat beberapa commit pada file yang berbeda, tetapi sejauh ini saya ingin mendorong repositori jarak jauh saya hanya komit tertentu.
Apakah itu mungkin?
Jawaban:
Untuk mendorong melalui komit yang diberikan, Anda dapat menulis:
git push <remotename> <commit SHA>:<remotebranchname>
asalkan <remotebranchname>
sudah ada di remote. (Jika tidak, Anda dapat menggunakannya git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
untuk membuat otomatis.)
Jika Anda ingin mendorong komit tanpa mendorong komit sebelumnya, Anda harus terlebih dahulu menggunakan git rebase -i
untuk memesan ulang komit.
git push <remotename> <commit SHA>:<remotebranchname>
bekerja. triknya adalah menggabungkannya dengan git rebase -i
memindahkan komit yang Anda inginkan sebagai komit pertama, dan tentukan komit itu
git push <remotename> <commit SHA>:refs/heads/<new remote branch name>
. Setelah ini, tekan seperti dijelaskan di jawaban.
git push origin HEAD~1:master
.
-f
bendera.
Jawaban lainnya kurang pada uraian pemesanan ulang.
git push <remotename> <commit SHA>:<remotebranchname>
akan mendorong satu komit, tetapi komit tersebut harus menjadi TERTUA dari komit lokal Anda, tanpa dorongan, tidak boleh dikacaukan dengan komit teratas, pertama, atau tip, yang semuanya merupakan deskripsi yang ambigu menurut pendapat saya. Komit perlu untuk komitmen tertua Anda, yaitu komitmen terjauh dari komit terbaru Anda. Jika itu bukan komitmen terlama maka semua komit dari SHA Anda yang tertua, lokal, tanpa dorongan ke SHA yang ditentukan akan didorong. Untuk menyusun ulang komit, gunakan:
git rebase -i HEAD~xxx
Setelah memesan ulang komit, Anda dapat dengan aman mendorongnya ke repositori jarak jauh.
Untuk meringkas, saya menggunakan
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
untuk mendorong satu komit ke cabang master jarak jauh saya.
Referensi:
Lihat juga:
Saya sarankan menggunakan git rebase -i
; pindahkan komit yang ingin Anda dorong ke atas komit yang telah Anda buat. Kemudian gunakan git log
untuk mendapatkan SHA dari komit rebased, memeriksanya, dan mendorongnya. Rebase akan memastikan bahwa semua komit Anda yang lain sekarang adalah anak-anak dari yang Anda dorong, sehingga dorongan di masa depan akan bekerja dengan baik juga.
git log
langkahnya?
Cherry-pick bekerja paling baik dibandingkan dengan semua metode lain sambil mendorong komit tertentu.
Cara untuk melakukannya adalah:
Buat cabang baru -
git branch <new-branch>
Perbarui cabang baru Anda dengan cabang asal Anda -
git fetch
git rebase
Tindakan ini akan memastikan bahwa Anda memiliki barang yang sama persis seperti asal Anda.
Ceri-pilih sha id
yang ingin Anda dorong -
git cherry-pick <sha id of the commit>
Anda bisa mendapatkannya sha id
dengan menjalankan
git log
Dorong ke tempat asal Anda -
git push
Jalankan gitk
untuk melihat bahwa semuanya tampak seperti yang Anda inginkan.
git rebase -i
akan menjadi solusi ideal seperti yang disarankan dalam solusi di atas. Cherry pick harus digunakan hanya ketika Anda ingin menduplikasi komit.
Saya percaya Anda harus "git kembali" ke komit itu dan kemudian mendorongnya. Atau Anda bisa cherry-pick
mengkomit ke cabang baru, dan mendorongnya ke cabang di repositori jarak jauh. Sesuatu seperti:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
cherry-pick
komit yang Anda inginkan.
Anda juga bisa, di direktori lain: