Я не мастер Git, но я работаю с ним в течение некоторого времени, с несколькими различными проектами. В каждом проекте я всегда git clone [repository]
и с этого момента всегда могу git pull
, если, конечно, у меня нет выдающихся изменений.
Недавно мне пришлось вернуться к предыдущей ветке, и сделал это с git checkout 4f82a29
. Когда я снова был готов вытащить, я обнаружил, что должен был вернуть свою ветвь обратно в мастер. Теперь я не могу тянуть, используя стрит, git pull
но вместо этого, должен указать git pull origin master
, что раздражает, и указывает мне, что я не до конца понимаю, что происходит.
Что изменилось, что не позволяет мне делать стрит git pull
без указания мастера оригинала, и как я могу изменить его обратно?
ОБНОВИТЬ:
-bash-3.1$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[branch "master"]
[remote "origin"]
url = git@github.com:user/project.git
fetch = refs/heads/*:refs/remotes/origin/*
ОБНОВЛЕНИЕ 2: Чтобы было ясно, я понимаю, что мой оригинальный метод, возможно, был неправильным, но мне нужно исправить это репо, чтобы я мог просто использовать git pull
снова. В настоящее время git pull приводит к:
-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.
Я могу сказать, git pull
какую ветку объединить, и она работает правильно, но git pull
не работает так, как это было раньше до моей git checkout
.
источник
Ответы:
В разделе
[branch "master"]
попробуйте добавить следующее в файл конфигурации Git репозитория (.git/config
):Это говорит Git 2 вещи:
git pull
в главной ветви, без указания удаленной ветви и ветви, используйте удаленную по умолчанию (origin) и объедините изменения из удаленной главной ветви.Я не уверен, почему эта установка была бы удалена из вашей конфигурации, хотя. Возможно, вам придется следовать предложениям других людей, но это может сработать (или, по крайней мере, помочь).
Если вы не хотите редактировать файл конфигурации вручную, вместо этого вы можете использовать инструмент командной строки:
источник
.git/config
).$ git config branch.master.remote origin ; git config branch.master.merge refs/heads/master
.Если вы предпочитаете, вы можете установить эти параметры через коммандную строку (вместо редактирования файла конфигурации) следующим образом:
Или, если вы похожи на меня и хотите, чтобы это было значением по умолчанию для всех ваших проектов, включая те, над которыми вы можете работать в будущем, добавьте его в качестве параметра глобальной конфигурации:
источник
.git
в котором, как представляется, git хранит хеш-кодmaster
текущего коммита.Это добавит следующую информацию в ваш
config
файл:Если у вас есть,
branch.autosetuprebase = always
он также добавит:источник
fatal: Not a valid object name: 'origin/master'.
несмотря на то, что онorigin
является действительным удаленным иmaster
существует, как обычно, в обоих репозиториях.git branch --set-upstream-to=origin/master master
.Мне трудно вспомнить точные аргументы
git config
илиgit branch
аргументы, как в ответах Мипади и Кейси, поэтому я использую эти 2 команды, чтобы добавить ссылку вверх по течению:Это добавит ту же информацию в ваш .git / config, но мне легче запомнить.
источник
Git pull объединяет два действия - получение новых коммитов из удаленного репозитория в отслеживаемых ветвях и последующее объединение их в текущую ветку .
Когда вы извлекли конкретный коммит, у вас нет текущей ветки, у вас есть только заголовок, указывающий на последний сделанный вами коммит. Так
git pull
что не все параметры указаны. Вот почему это не сработало.Исходя из вашей обновленной информации, вы пытаетесь восстановить удаленное репо. Если вы знаете коммит,
git revert
который привел к ошибке, самый простой способ справиться с этим - записать новый коммит, который отменяет указанный коммит с ошибкой:Поскольку вы хотите изменить свой сервер, я предполагаю, что вам не нужно переписывать историю, чтобы скрыть ошибочный коммит.
Если ошибка была внесена в коммит слияния, то эта процедура не будет работать. См. Как вернуть-неисправный-слияния .
источник
Существует также способ настройки Git, поэтому он всегда извлекает и отправляет эквивалентную удаленную ветвь в ветку, извлеченную в настоящий момент в рабочую копию. Это называется ветка отслеживания, которую git ready рекомендует установить по умолчанию .
Для следующего хранилища выше текущего рабочего каталога:
Для всех Git-репозиториев, которые не настроены иначе:
Вид магии, ИМХО , но это может помочь в тех случаях , когда конкретная отрасль является всегда текущая ветвь .
Когда вы впервые
branch.autosetupmerge
настроитеtrue
и извлечете ветку, Git сообщит вам об отслеживании соответствующей удаленной ветки:Затем Git автоматически отправит в соответствующую ветку:
источник
Не желая редактировать мой конфигурационный файл git, я следовал за информацией в посте @ mipadi и использовал:
источник
Ваш немедленный вопрос о том, как заставить его тянуть мастера, нужно делать то, что он говорит. Укажите refspec для извлечения из вашей конфигурации филиала.
источник
Просто хотел добавить некоторую информацию, мы можем проверить эту информацию, независимо от того,
git pull
ссылается ли она автоматически на какую-либо ветку или нет.Если вы запустите команду,
git remote show origin
(при условии, что origin является коротким именем для удаленного), git покажет эту информацию, независимо от того, существует ли какая-либо ссылка по умолчаниюgit pull
или нет.Ниже приведен пример вывода (взят из документации git).
Обратите внимание на ту часть, где это показано, локальная ветка настроена для git pull.
В этом случае
git pull
будет ссылаться наgit pull origin master
Первоначально, если вы клонировали репозиторий, используя git clone, об этих вещах автоматически позаботятся. Но если вы добавили удаленный вручную с помощью git remote add, они отсутствуют в конфигурации git. Если это так, то часть, где показано «Локальная ветвь, настроенная для« git pull »:», будет отсутствовать в выводе
git remote show origin
.Следующие шаги, которые необходимо выполнить, если не существует конфигурации
git pull
, уже были объяснены другими ответами.источник