Saya memiliki dua cabang:
- cabang lokal (cabang tempat saya bekerja)
- cabang terpencil (publik, hanya komit yang teruji pergi ke sana)
Baru-baru ini saya serius mengacaukan cabang lokal saya.
Bagaimana saya mengganti cabang lokal sepenuhnya dengan yang jauh, sehingga saya dapat melanjutkan pekerjaan saya dari tempat cabang terpencil sekarang?
Saya sudah mencari SO dan memeriksa ke cabang jarak jauh secara lokal tidak memiliki efek apa pun.
Jawaban:
Mengasumsikan master adalah cabang lokal yang Anda gantikan, dan "asal / master" adalah cabang jarak jauh yang ingin Anda atur ulang:
Ini memperbarui cabang KEPALA lokal Anda untuk menjadi revisi yang sama dengan asal / master, dan
--hard
akan menyinkronkan perubahan ini ke dalam indeks dan ruang kerja juga.sumber
git reset
secara default akan mengecoh cabang Anda saat ini dan menyinkronkan indeks.--soft
akan melewati pembaruan indeks,--hard
juga akan menyinkronkan ruang kerja. Pengalaman saya sendiri menggunakan--hard
sebagian besar waktu, kecuali ketika saya ingin membatalkan komit terakhir (yang adilgit reset HEAD^
)git fetch origin remote_branch
master
, jadi pastikan Anda telah memeriksa cabang yang Anda ganti terlebih dahulu.Itu semudah tiga langkah:
git branch -d local_branch
git fetch origin remote_branch
git checkout -b local_branch origin/remote_branch
sumber
git branch -D local_branch
di langkah pertama jika cabang Anda tidak digabung.sumber
git help branch
dikatakan tentang--track
.When creating a new branch, set up branch.<name>.remote and branch.<name>.merge configuration entries to mark the start-point branch as "upstream" from the new branch. This configuration will tell git to show the relationship between the two branches in git status and git branch -v. Furthermore, it directs git pull without arguments to pull from the upstream when the new branch is checked out.
Saya memperbaiki perintah ini dalam jawabannya. Terima kasih telah menyampaikan poinnya.git status
, itu akan melaporkan jika cabang lokal Anda ada di depan atau di belakang cabang jarak jauh jika Anda memiliki mereka yang terkait. Selain itu, Anda dapat melakukangit pull
(ataupush
) alih-alih penuhgit pull <remote> <branch>
jika Anda telah mengatur cabang Anda untuk dilacak<remote/branch>
.Ganti semuanya dengan cabang jarak jauh; tetapi , hanya dari komit yang sama dengan cabang lokal Anda yang aktif:
ATAU , dapatkan yang terbaru dari cabang jarak jauh dan ganti semuanya:
Selain itu, jika perlu, Anda dapat menghapus file & direktori yang tidak terlacak yang belum Anda lakukan:
sumber
git clean
perintah melakukannya untuk saya.git reset hard origin/master
jangan menghapus file yang tidak terlacak. Terima kasih!Cara teraman dan terlengkap untuk mengganti cabang lokal saat ini dengan remote:
The
stash
garis menyimpan perubahan yang Anda belum berkomitmen. Thebranch
garis bergerak cabang Anda ke nama yang berbeda, membebaskan nama asli. Thefetch
garis mengambil salinan terbaru dari remote. Thecheckout
garis recreates cabang asli sebagai cabang pelacakan.Atau sebagai fungsi bash:
yang mengubah nama cabang saat ini menjadi sesuatu seperti replace_master_98d258f.
sumber
git stash pop
dalam alur kerja itu. Jika Anda ingin menerapkan kembali file simpanan Anda.Saya agak terkejut belum ada yang menyebutkan ini; Saya menggunakannya hampir setiap hari:
Pada dasarnya,
@{u}
hanya singkatan untuk cabang hulu yang dilacak oleh cabang Anda saat ini. Misalnya, ini biasanya sama denganorigin/[my-current-branch-name]
. Itu bagus karena itu cabang agnostik.Pastikan untuk
git fetch
pertama - tama mendapatkan salinan terbaru dari cabang jarak jauh.sumber
Ini dapat dilakukan dengan berbagai cara, terus mengedit jawaban ini untuk menyebarkan perspektif pengetahuan yang lebih baik.
1) Atur ulang dengan keras
Jika Anda bekerja dari cabang pengembangan jarak jauh, Anda dapat mengatur ulang KEPALA ke komit terakhir di cabang jarak jauh seperti di bawah ini:
2) Hapus cabang saat ini, dan checkout lagi dari repositori jarak jauh
Menimbang, Anda sedang bekerja mengembangkan cabang di repo lokal, yang disinkronkan dengan cabang jarak jauh / kembangkan, Anda dapat melakukan seperti di bawah ini:
3) Batalkan Penggabungan
Jika Anda berada di antara penggabungan yang buruk (keliru dilakukan dengan cabang yang salah), dan ingin menghindari penggabungan untuk kembali ke cabang terbaru seperti di bawah ini:
4) Batalkan Pengguguran
Jika Anda berada di antara rebase buruk, Anda dapat membatalkan permintaan rebase seperti di bawah ini:
sumber
Anda dapat melakukan seperti yang dikatakan @Hugo dari @Laurent, atau Anda dapat menggunakan
git rebase
untuk menghapus komit yang ingin Anda singkirkan, jika Anda tahu yang mana. Saya cenderung menggunakangit rebase -i head~N
(di mana N adalah angka, memungkinkan Anda untuk memanipulasi komit N terakhir) untuk operasi semacam ini.sumber
The jawaban yang dipilih benar-benar benar , namun tidak meninggalkan saya dengan terbaru komit / dorongan ...
Jadi buat saya:
Karena saya tahu saya ingin mengatur sementara cabang hulu saya selama beberapa minggu ke cabang tertentu (sama seperti yang saya alihkan / periksa sebelumnya dan melakukan hard reset)
Jadi SETELAH reset
sumber
Jika Anda ingin memperbarui cabang yang saat ini tidak diperiksa, Anda dapat melakukannya:
sumber
Seperti yang diberikan pada penjelasan yang dipilih, git reset bagus. Tetapi saat ini kita sering menggunakan sub-modul: repositori di dalam repositori. Sebagai contoh, Anda jika Anda menggunakan ZF3 dan jQuery dalam proyek Anda, kemungkinan besar Anda ingin mereka diklon dari repositori aslinya. Dalam kasus seperti itu git reset tidak cukup. Kita perlu memperbarui submodules ke versi yang tepat yang didefinisikan dalam repositori kami:
itu sama seperti Anda akan datang (cd) secara rekursif ke direktori kerja setiap sub-modul dan akan berjalan:
Dan sangat berbeda dari
karena sub-modul menunjuk bukan ke cabang tetapi ke komit.
Dalam hal ini ketika Anda secara manual checkout beberapa cabang untuk 1 atau lebih submodul yang dapat Anda jalankan
sumber
git reset --hard
. Ini menambah sedikit nilai.Ini bekerja untuk saya - bersih menunjukkan semua file yang dihapus juga. Jika itu memberi tahu Anda bahwa Anda akan kehilangan perubahan, Anda harus menyimpannya.
sumber
Cara jelek tapi sederhana: hapus folder lokal Anda, dan tiru repositori jarak jauh lagi.
sumber