Git тягнути без оформлення?


133

Я звик запускати git pull та інші команди з гілки, над якою працюю. Але я створив сервер розробки, над яким працює декілька людей, тому мені не хочеться перемикати гілки, коли я це роблю. Якщо я хочу оновити існуючу гілку на сервері розробок із сховища github, яку ми всі використовуємо, який би це був правильний спосіб зробити це? Якщо я запускаю команду "git pull github branchname", це просто потягне гілку в поточну гілку?

Усі приклади git, які я можу знайти, начебто вказують на те, що спершу ви запустите "ім'я відділення під замовлення", а потім витягніть. Я намагаюся цього уникнути. Як я вже сказав, це вже існуюча галузь, і я просто хочу оновити до останньої версії.


6
git fetchслід робити те, що ти хочеш.
Бред

11
git fetchоновила б локальну копію віддаленої гілки, але не будь-яку локальну гілку, навіть якщо вона створена для відстеження цієї конкретної віддаленої гілки. Це може бути, а може і не бути тим, що потрібно. (Редагувати: за замовчуванням, у будь-якому випадку. Можна викликати це аргументами, щоб змусити його вести себе по-різному, але в такому випадку аргументи дійсно слід вказати.)

2
Я не зовсім розумію ... чи всі користуються тим же локальним сховищем на сервері розробників? Ось чому ви не хочете перемикати гілки? Чому б просто не зробити кожного свого приватного клону, в якому вони можуть працювати? Дивіться також git: оновити локальну гілку, не перевіряючи її? .

Відповіді:


221

Я шукав те ж саме і, нарешті, знайшов відповідь, яка працювала на мене в іншій публікації про stackoverflow: Об’єднати, оновити та витягнути гілки Git без використання замовлень

В основному:

git fetch <remote> <srcBranch>:<destBranch>


Чи є спосіб використовувати гілку вище за течією, а не вказувати вихідну гілку?
cambunvolu

До жаль, але pullє параметри , які fetchне чинить: -s <strategy>, -Xsubtree=...який був життєво важливим для мене, так що це не є рівноцінною заміною. У мене була проблема, описана тут: congruityservice.com/blog/…, але в моєму випадку я взагалі не хотів оформляти замовлення.
Андрі

2
Зважаючи на те, що питання стосується тягнення, здається, натомість відповідь має бути git pull <remote> <srcBranch>:<destBranch>.
J Woodchuck

Якщо комісії вже є у вашому місцевому сховищі:git fetch . origin/master:master
Еван,

74

У мене була та сама проблема, що потрібно здійснити чи приховати поточні зміни функції, перевірити головну гілку, виконати pullкоманду зробити все від віддаленого до локальної masterробочої області, потім знову переключитися на гілку функції та виконати, rebaseщоб зробити її актуальною з майстер.

Щоб все це було зроблено, збережіть робочу область на гілці функцій і уникайте всіх комутацій, я роблю це:

git fetch origin master:master

git rebase master

І це гарно робить трюк.


19
Це хороша порада, але поховає лідери: відповідно до наведених нижче відповідей, якщо ви працюєте, featureі ВСЕ, що ви хочете зробити, це оновити ваш локальний, masterщоб він відповідав походженням, БЕЗ дотику feature, просто робіть git fetch origin master:master... і це як ніби ви stash-checkoutMaster-pull-checkoutFeature-stashPop!
місті

7
Щоб об'єднати початковий майстер у свою місцеву гілку, вам не потрібно тягнути локального магістра. Ви можете використовувати git merge origin/master
Dan

-1

Якщо ви хочете, щоб поради щодо місцевих відділень були повторно вказані після цього git fetch, вам потрібні додаткові кроки.

Більш конкретно, припустимо , що GitHub репо має філії D, B, Cі master(причина цього дивного відгалуженням ім'я-набору буде ясно , в даний час). Ви знаходитесь у хості devhostта знаходитесь у репо, де originзнаходиться github repo. Ви робите git fetch, який приносить більше всі об'єкти і поновлення origin/D, origin/B, origin/C, і origin/master. Все йде нормально. Але тепер ви говорите , що ви хочете що - щось трапиться, на devhost, в місцевих філіях D, B, Cі / або master?

У мене є ці очевидні (для мене все-таки) питання:

  1. Чому ви хочете оновлювати поради всіх гілок?
  2. Що робити, якщо деяка гілка (наприклад, B) зобов'язується бракувати віддаленого (github) репо? Чи повинні вони бути об'єднані, перезавантажені чи ...?
  3. Що робити, якщо ви знаходитесь у якійсь гілці (наприклад, C), а робочий каталог та / або індекс змінені, але не скоєні?
  4. Що робити, якщо до віддаленого РЕПО додані нові гілки ( A) та / або гілки ( D)?

Якщо відповідь на (1) є "тому devhost, що насправді не для розвитку, а, скоріше, це локальне дзеркало, яке просто зберігає доступну в локальному масштабі копію github repo, щоб усі наші фактичні розробники могли читати з неї швидко, а не читати повільно з github ", тоді ви хочете" дзеркало ", а не" звичайне "репо. У ньому не повинно бути робочого каталогу, і, можливо, він також не повинен приймати натиснення, і в цьому випадку решта питань просто відпадає.

Якщо є якась інша відповідь, (2-4) стає проблематичним.

У будь-якому випадку, ось як вирішити оновлення локальних рефлексій на основі віддалених рефлексив (наприклад, після запуску git fetch -p):

for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
    local=${ref#refs/remotes/origin/}
    ... code here ...
done

Що йде в ... code here ...розділі, залежить від відповідей на запитання (2-4).


-5

Використовуйте

git fetch

замість цього. Він оновлює віддалені джерела та об'єкти у вашому репо, але залишає місцеві гілки, HEAD та робоче дерево в спокої.


17
Але це не оновлює локальні гілки його сервера розробки ... це лише оновлює гілки "походження" в тій папці git, які відповідають github repo запитувача.
ANeves

1
Або, якщо ви хочете мою версію проблеми: я хочу об'єднати свою робочу гілку з "master", а не з "origin / master ssh: // bla bla bla". Виконання вибору буде оновлювати початок / master, але не master.
ANeves

-6

РЕДАКТУВАННЯ: Використовуйте "git pull", воно отримає всі гілки з репо, а також оновиться до останнього, якщо гілка вийде з локальної системи лише для поточної гілки. Примітка: git pull еквівалентний fetch + merge, який отримує всі гілки, але об'єднує лише поточну гілку.


6
Краще сказати: pullробить витяг (який, так, витягує все з пульта), але потім об'єднує лише поточну гілку.
torek

Я не маю на увазі правопорушення, я знаю, що те, що ви говорите, є правильним та фактичним, і ОП дійсно просило підтвердження того, що робить (і ви дали йому це пояснення), але це не стосується адреси суть того, про що він пішов: Чи є спосіб оновити один із ваших локальних відділень до останніх комісій у відповідній віддаленій гілці без необхідності спочатку перевірити цю гілку.
Gurce
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.