2014-01-25 3 views
3

Я довольно новичок в Git, поэтому извиняюсь, если я пою, как полный noob.git - получить последний файл после первоначального клонирования

Сначала я побежал следующую команду:

git clone https://github.com/userx/projecty.git 

Я делал изменения на моем рабочем месте, ни один из которых были загружены. Существует один файл, который был обновлен на GitHub, что я хотел бы синхронизировать с моей рабочей станции:

https://github.com/userx/projecty/blob/master/whatever/whatever.py 

Я сделал некоторые изменения к нему на местном уровне, но они могут/должны быть перезаписаны. Я только хочу, чтобы один файл обновился на моей рабочей станции, не касаясь чего-либо еще, что я сделал. Любые идеи о том, как это сделать, будут оценены.

Спасибо!

+1

Похоже, вы можете это сделать здесь: http://stackoverflow.com/questions/16230838/git-is-it-possible-to-pull-just-for-one-file Что вы ищете - это тянуть один файл, а не клонирование. – bozdoz

+0

Вы просто пытаетесь получить последнее содержимое этого файла, но как локально модифицированный (но не проверенный) файл? Возможно, вместо того, чтобы задавать некоторые особенности операции git, сообщите нам, чего вы пытаетесь выполнить. – Raman

+0

Я добавил несколько подробностей к моему вопросу. Теперь это имеет смысл? – dana

ответ

2

Предполагая, что вы просто хотите, чтобы перезаписать содержимое этого файла в вашей рабочей копии (так, что она будет отображаться как «модифицированный» на выходе git status, то вы можете сделать это следующим образом:

  1. .

    Обновление удаленных филиалов отслеживания вашего локального хранилища с помощью git fetch Это не изменяет местных отделений, ни ваша рабочая копия:

    git fetch --all

  2. Использование git show получить копию файла с удаленного филиала, и пишут, что на диске путем перенаправления стандартного вывода:

    git show origin/master:whatever/whatever.py > whatever/whatever.py

Указав origin/master вы копируете файл с удаленного филиала отслеживания, который будет последней версией этого файла с git fetch. Конечно, вы можете перенаправить стандартный вывод, чтобы перезаписать существующий файл, как показано выше, или написать вывод в другом месте.

Команда git show принимает и другие форматы: см. «УКАЗАНИЕ РЕВИЗИОНОВ» в man gitrevisions.

Обратите внимание, что, поскольку @bluefeet прокомментировал их ответ, если вы зафиксируете этот файл в своем локальном филиале, и ваша локальная ветка будет объединена с удаленным мастером позже, тогда локально скопированный whatever/whatever.py будет находиться в конфликте с изменения от удаленной ветви отслеживания. Таким образом, вы обычно делаете это только как временную меру для проверки чего-либо или если у вас нет намерения позже слить локальную ветку с удаленным мастером.

+1

Спасибо! Я не уверен, что то, что вы показали мне, было взломанным или нет, но это сработало :) Очень благодарен! – dana

+1

На самом деле это не хак. Одна из самых мощных функций git - это ветка удаленного отслеживания, поскольку она дает вам доступ к состоянию удаленного репозитория (или репозиториев) в любое время. Из этого состояния вы можете отображать отдельные файлы или деревья при любой ревизии, или объединять изменения, или все, что вам нужно. Я думаю, что один из самых больших проблем для людей, изучающих git, не учит комбинациям git fetch и git merge' перед * обучением 'git pull' (что эквивалентно), потому что git pull скрывает, как git использует удаленные ветви отслеживания. – Raman

0

Я бы предложил такой подход:

# Undo your changes to whatever.py. 
git checkout whatever/whatever.py 

# Pack up all your other changes, saving them to a special stash area. 
git stash 

# Update your repo, getting the latest, including the latest whatever.py. 
git pull 

# Now restore you changes from the stash. 
git stash pop 

Это должно сделать это, и ставит вас в хорошем рабочем состоянии.

+0

Нет, это также обновит любые другие файлы, которые также были обновлены на пульте дистанционного управления. – Raman

+0

@ Raman: Правда, но читая между строк, я уверен, что это то, чего хочет плакат. Другое предлагаемое решение, использующее 'git show', вызывает what.py для показа в git, как если бы плакат был тем, который внес все изменения в этот файл, и может привести к очень сложным конфликтам в будущем, если это будет сделано , – bluefeet

+0

Правда. Я не думаю, что это то, чего хотел OP, но ваша заметка о потенциальном конфликте в будущем, если местная HEAD не обновлена, - хорошая, я добавил к ней свой постскриптум. – Raman

Смежные вопросы