Saya bukan master git, tetapi saya telah bekerja dengannya untuk beberapa waktu sekarang, dengan beberapa proyek yang berbeda. Dalam setiap proyek, saya selalu git clone [repository]
dan sejak saat itu, selalu bisa git pull
, selama saya tidak memiliki perubahan yang luar biasa, tentu saja.
Baru-baru ini, saya harus kembali ke cabang sebelumnya, dan melakukannya dengan git checkout 4f82a29
. Ketika saya lagi siap untuk menarik, saya menemukan bahwa saya harus mengatur cabang saya kembali ke master. Sekarang, saya tidak bisa menarik menggunakan straight git pull
tetapi sebaliknya, harus menentukan git pull origin master
, yang menjengkelkan, dan menunjukkan kepada saya bahwa saya tidak sepenuhnya mengerti apa yang sedang terjadi.
Apa yang telah berubah yang tidak memungkinkan saya untuk melakukan straight git pull
tanpa menentukan master asal, dan bagaimana cara mengubahnya kembali?
MEMPERBARUI:
-bash-3.1$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[branch "master"]
[remote "origin"]
url = [email protected]:user/project.git
fetch = refs/heads/*:refs/remotes/origin/*
UPDATE 2: Agar lebih jelas, saya mengerti bahwa metode asli saya mungkin salah, tetapi saya harus memperbaiki repo ini sehingga saya bisa menggunakannya git pull
lagi. Saat ini, git pull menghasilkan:
-bash-3.1$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull ').
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.master.remote =
branch.master.merge =
remote..url =
remote..fetch =
See git-config(1) for details.
Saya dapat memberitahu git pull
cabang mana yang akan digabung, dan berfungsi dengan benar, tetapi git pull
tidak berfungsi seperti yang dilakukan sebelumnya git checkout
.
sumber
Jawaban:
Di bawah
[branch "master"]
, coba tambahkan berikut ini ke file konfigurasi Git repo (.git/config
):Ini memberi tahu Git 2 hal:
git pull
pada cabang master, tanpa remote dan cabang yang ditentukan, gunakan remote default (asal) dan menggabungkan perubahan dari cabang master jarak jauh.Saya tidak yakin mengapa pengaturan ini akan dihapus dari konfigurasi Anda. Anda mungkin harus mengikuti saran yang diposkan orang lain juga, tetapi ini mungkin berhasil (atau setidaknya membantu).
Jika Anda tidak ingin mengedit file konfigurasi dengan tangan, Anda dapat menggunakan alat baris perintah sebagai gantinya:
sumber
.git/config
).$ git config branch.master.remote origin ; git config branch.master.merge refs/heads/master
.Jika Anda mau, Anda dapat mengatur opsi-opsi ini melalui baris perintah (alih-alih mengedit file konfigurasi) seperti:
Atau, jika Anda seperti saya, dan ingin ini menjadi default di semua proyek Anda, termasuk yang mungkin Anda kerjakan di masa depan, kemudian tambahkan itu sebagai pengaturan konfigurasi global:
sumber
.git
di mana git muncul untuk menjaga kode hash darimaster
commit saat ini.Ini akan menambahkan info berikut ke
config
file Anda :Jika sudah,
branch.autosetuprebase = always
maka itu juga akan menambahkan:sumber
fatal: Not a valid object name: 'origin/master'.
meskipunorigin
merupakan remote yang valid, danmaster
ada, seperti biasa, di kedua repo.git branch --set-upstream-to=origin/master master
.Saya merasa sulit untuk mengingat persis
git config
ataugit branch
argumen seperti dalam jawaban mipadi dan Casey, jadi saya menggunakan 2 perintah ini untuk menambahkan referensi upstream:Ini akan menambahkan info yang sama ke .git / config Anda, tetapi saya merasa lebih mudah diingat.
sumber
Git pull menggabungkan dua tindakan - mengambil komit baru dari repositori jarak jauh di cabang yang dilacak dan kemudian menggabungkannya ke cabang Anda saat ini .
Ketika Anda memeriksa komit tertentu, Anda tidak memiliki cabang saat ini, Anda hanya memiliki HEAD yang menunjuk ke komit terakhir yang Anda buat. Jadi
git pull
tidak memiliki semua parameter yang ditentukan. Itu sebabnya itu tidak berhasil.Berdasarkan info Anda yang diperbarui, apa yang Anda coba lakukan adalah mengembalikan repo jarak jauh Anda. Jika Anda mengetahui komit yang memperkenalkan bug, cara termudah untuk menangani ini adalah dengan
git revert
mencatat komit baru yang membatalkan komit buggy yang ditentukan:Karena server Anda yang ingin Anda ubah, saya akan berasumsi bahwa Anda tidak perlu menulis ulang riwayat untuk menyembunyikan komit buggy.
Jika bug diperkenalkan di komit gabungan, maka prosedur ini tidak akan berfungsi. Lihat Cara-mengembalikan-gabungan-kesalahan .
sumber
Ada juga cara mengkonfigurasi Git, sehingga selalu menarik dan mendorong cabang jarak jauh yang setara ke cabang yang saat ini diperiksa ke copy pekerjaan. Ini disebut cabang pelacakan yang git ready merekomendasikan pengaturan secara default .
Untuk repositori berikutnya di atas direktori kerja saat ini:
Untuk semua repositori Git, yang tidak dikonfigurasi sebaliknya:
Jenis sihir, IMHO tapi kekuatan ini membantu dalam kasus di mana cabang tertentu adalah selalu cabang saat ini .
Ketika Anda telah
branch.autosetupmerge
mengatur ketrue
dan checkout cabang untuk pertama kalinya, Git akan memberi tahu Anda tentang pelacakan cabang jarak jauh yang sesuai:Git kemudian akan mendorong ke cabang yang sesuai secara otomatis:
sumber
Tidak ingin mengedit file konfigurasi git saya, saya mengikuti info di pos @ mipadi dan menggunakan:
sumber
Pertanyaan langsung Anda tentang cara membuatnya menarik, Anda perlu melakukan apa yang dikatakannya. Tentukan refspec untuk menarik dari dalam konfigurasi cabang Anda.
sumber
Hanya ingin menambahkan beberapa info itu, kita dapat memeriksa info ini apakah
git pull
secara otomatis merujuk ke cabang apa pun atau tidak.Jika Anda menjalankan perintah,,
git remote show origin
(dengan asumsi asal sebagai nama pendek untuk remote), git menampilkan info ini, apakah ada referensi default adagit pull
atau tidak.Di bawah ini adalah contoh keluaran. (Diambil dari dokumentasi git).
Harap perhatikan bagian di mana ia ditampilkan, Cabang lokal dikonfigurasi untuk tarikan git.
Dalam hal ini,
git pull
akan merujukgit pull origin master
Awalnya, jika Anda telah mengkloning repositori, menggunakan git clone, hal-hal ini secara otomatis diurus. Tetapi jika Anda telah menambahkan remote secara manual menggunakan add remote git, ini tidak ada dari konfigurasi git. Jika demikian, maka bagian di mana ia menunjukkan "Cabang lokal yang dikonfigurasi untuk 'git pull':", akan hilang dari output
git remote show origin
.Langkah selanjutnya yang harus diikuti jika tidak ada konfigurasi
git pull
, sudah dijelaskan oleh jawaban lain.sumber