Saya menulis beberapa skrip untuk alur kerja Git saya.
Saya perlu mengatur ulang cabang lain (yang ada) ke yang sekarang, tanpa pembayaran.
Sebelum:
CurrentBranch: commit A
OtherBranch: commit B
Setelah:
CurrentBranch: commit A
OtherBranch: commit A
Sama dengan
$ git checkout otherbranch
$ git reset --soft currentbranch
$ git checkout currentbranch
(Catatan --soft
: Saya tidak ingin memengaruhi pohon kerja.)
Apakah ini mungkin?
Jawaban:
Alur kerja yang Anda gambarkan tidak setara: saat Anda melakukan,
reset --hard
Anda kehilangan semua perubahan di pohon kerja (Anda mungkin ingin membuatnyareset --soft
).Yang Anda butuhkan adalah
sumber
refs/heads/
git push . current:other
. Ini bekerja tanparefs/heads
(/ cc @elliottcable), dan itu juga mencegah Anda memperbarui cabang yang diperiksa. Perhatikan bahwa Anda mungkin perlu meneruskan -f (atau menggunakan+current:other
) jika pembaruan tidak dipercepat.-m 'some text'
argumen untuk mencatat alasan pembaruangit reflog OtherBranch
referensi ditampilkan oleh perintah, seperti "disinkronkan ke CurrentBranch". Semoga bermanfaat untuk mengingat mengapa Anda melakukannya nanti.git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch
ataugit push . CurrentBranch OtherBranch
ketika Anda dapat menggunakan lebih bersih (IMO)git branch -f OtherBranch CurrentBranch
? (Lihat jawaban saya di git branch -f di bawah)Setel
otherbranch
ke titik pada komit yang sama seperticurrentbranch
dengan berlariOpsi
-f
(gaya) memberi tahugit branch
ya, saya benar-benar bermaksud untuk menimpaotherbranch
referensi yang ada dengan yang baru .Dari dokumentasi :
sumber
fatal: Cannot force update the current branch.
ketika mencoba melakukan ini.otherbranch
check out. Pertanyaan SO ini secara khusus tentang mengatur ulang cabang lain ke komit yang berbeda (yaitu tidak mengatur ulang cabang yang diperiksa). Yang ingin Anda lakukan adalah mereset cabang saat ini dengangit reset targetbranch
memaksa cabang saat ini untuk diarahkantargetbranch
. Tambahkan--hard
juga untuk memaksa pohon kerja ke konten itu. Atau--soft
biarkan indeks dan hanya mengubah cabang itu sendiri.branch -f
bisa melakukan itu.Anda dapat menyinkronkan dengan perintah ini cabang Anda kapan saja
Juga tanpa -f itu menggantikan set perintah ini
Ini bisa berguna ketika Anda tidak perlu mengkomit semua file Anda di CurrentBranch dan Anda tidak bisa beralih ke cabang lain.
sumber
-f
opsi kecuali itu benar-benar tidak bisa dihindari. Ini bekerja dengan baik tanpa itu dalam kasus saya.