Saya memiliki repositori kosong yang digunakan sebagai pusat toko untuk proyek saya. Semua pengembang lakukan git clone <repo>
untuk berbagi dengannya. Ketika mereka melakukan kloning, mereka mendapatkan checkout dari cabang master (kecuali jika mereka melakukannya git clone -n
) karena repo.git/HEAD
mengandung ref: refs/heads/master
, menjadikan ini Cabang Aktif .
Pertanyaannya adalah, bagaimana cara mengubah Cabang Aktif dengan benar? Saya hanya bisa meretas repo.git/HEAD
file secara langsung, tetapi itu tampak tidak menyenangkan dan, well, hacky.
Saya mencoba melakukan git checkout <otherbranch>
di .git
direktori repo , tetapi gagal karena saya tidak berada di pohon kerja.
Saya mencoba git update-ref HEAD refs/heads/otherbranch
tetapi yang baru saja memperbarui referensi / kepala / master harus sama dengan referensi / kepala / cabang lainnya (oke, saya melakukan itu di repositori dummy, bukan produksi saya!)
Saya mencoba git update-ref --no-deref HEAD refs/heads/otherbranch
dan itu hampir berhasil. Itu memperbarui HEAD
file, tetapi mengaturnya ke SHA1 dari komit yang ditunjuk oleh refs/heads/otherbranch
.
Saya sedang menguji dengan versi git 1.7.0.2.msysgit.0
.
Saya kira tidak ada cara untuk melakukan ini git push
, karena memungkinkan semua orang untuk mengubah cabang default Anda tampaknya sedikit tidak aman (!), Tapi pasti ada cara yang lebih baik untuk melakukannya di .git
direktori repo daripada langsung meretas HEAD
file.
Jawaban:
Jika Anda memiliki akses ke repo telanjang, artikel ini menyarankan :
sebagaimana didokumentasikan dalam
git-symbolic-ref
Jika Anda tidak memiliki akses ke repo jarak jauh, lihat jawaban saya sebelumnya .
Ingat bahwa perintah seperti
git remote set-head
:tidak mengubah cabang default repo jarak jauh .
Ini hanya mengubah cabang pelacakan jarak jauh yang disimpan di repo lokal Anda sebagai
refs/remotes/<name>/HEAD
tidak berubah dengan
HEAD
sendirinya (sekali lagi, hanyarefs/remotes/<name>/HEAD
), maka kebutuhan untukgit symbolic-ref
.Jadi
git remote set-head
bukan jawabannya di sini.git symbolic-ref HEAD
adalah, jika Anda memiliki akses langsung ke repo jarak jauh.sumber
git symbolic-ref HEAD refs/heads/mybranch
bekerja dengan baik untukku! TERIMA KASIH! ;)Untuk mengubah cabang, Anda perlu mengubah referensi HEAD ke cabang yang ingin Anda gunakan.
Pertama, daftarkan semua referensi di repositori kosong dengan melakukan
Kemudian temukan referensi untuk cabang Anda, formatnya adalah sebagai berikut
refs/heads/<my_branch>
. Jadi langkah selanjutnya adalah memeriksa referensi saat ini, cukup ketik:sehingga Anda tahu mana cabang saat ini kemudian perbarui sesuai kebutuhan.
Itu dia. Nikmati.
sumber
Bagaimana cara mengubah Cabang Aktif dengan benar?
status: git checkout di direktori repo. git mengembalikan fatal: Operasi ini harus dijalankan di pohon kerja
tips: cukup tambahkan argumen --work-tree
contoh terperinci: asumsi: bare git di server jauh:
di server lokal: buat cabang versi.1.7 (cabang lainnya kami)
git branch versi.1.7
git push origin versi.1.7
di server jauh dengan git bare repo:
$ cd ~ / bare_git_repository.git
cabang $ git
version.1.7
Sebagaimana dinyatakan, mengikuti perintah
git checkout versi.1.7
kembali
fatal: Operasi ini harus dijalankan di pohon kerja
Menggunakan perintah berikut
berhasil mengubah Cabang Aktif dengan benar
cabang $ git
menguasai
periksa hasilnya dengan berikut ini
Semoga ini bisa membantu
sumber
Juga, jika Anda tidak memiliki akses ke repositori kosong, dengan melakukan
git remote set-head
dan Anda selesaiLihat respons sebelumnya ini
sumber
Saya juga punya repo kosong di server kami dan berhasil mengambil file menggunakan
ke dalam repositori lokal baru meskipun halaman manual mengatakan ini hanya untuk repositori non-telanjang.
sumber
Saya membandingkan dua direktori sebelum dan sesudah mendaftar
git symbolic-ref HEAD refs/heads/mybranch
dan tampaknya hanya file repo.git / HEAD yang diubah jadi mungkin cukup aman untuk "meretas" file tersebut.
sumber