У меня есть две ветви:
- местный филиал (тот, с которым я работаю)
- удаленная ветка (общедоступная, туда идут только проверенные коммиты)
Недавно я серьезно испортил свой местный филиал.
Как мне полностью заменить локальную ветку на удаленную, чтобы я мог продолжить свою работу с того места, где сейчас находится удаленная ветка?
Я уже искал SO, и проверка на удаленную ветку локально не имеет никакого эффекта.
Ответы:
Предполагая, что master - это локальная ветвь, которую вы заменяете, и что origin / master - это удаленная ветвь, в которую вы хотите сбросить:
Это обновит вашу локальную ветку HEAD так, чтобы она была той же ревизией, что и origin / master, и
--hard
синхронизирует это изменение с индексом и рабочей областью.источник
git reset
по умолчанию переписывает вашу текущую ветку и синхронизирует индекс.--soft
пропустит обновление индекса,--hard
также синхронизирует рабочее пространство. Мой собственный опыт использует--hard
большую часть времени, за исключением случаев, когда я хочу отменить последний коммит (который простоgit reset HEAD^
)git fetch origin remote_branch
master
, поэтому убедитесь, что вы проверили ветку, которую заменяете в первую очередь.Это так просто, как три шага:
git branch -d local_branch
git fetch origin remote_branch
git checkout -b local_branch origin/remote_branch
источник
git branch -D local_branch
на первом шаге, если ваша ветвь не объединена.источник
git help branch
говорит о--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.
Я исправил эту команду в ответе. Спасибо, что подняли вопрос.git status
, он сообщит, находится ли ваша локальная ветвь впереди или позади удаленной, если они у вас есть. Кроме того, вы можете сделатьgit pull
(илиpush
) вместо полной,git pull <remote> <branch>
если вы уже настроили свою ветку для отслеживания<remote/branch>
.Заменить все на удаленную ветку; но только из того же коммита ваша локальная ветка включена:
ИЛИ , получите последнюю версию из удаленной ветки и замените все:
Кроме того, если необходимо, вы можете удалить неотслеживаемые файлы и каталоги, которые вы еще не добавили:
источник
git clean
сделала это для меня.git reset hard origin/master
не уничтожайте неотслеживаемые файлы. Спасибо!Самый безопасный и наиболее полный способ заменить текущую локальную ветку удаленной:
stash
Линия сохраняет изменения , которые вы не совершали.branch
Линия движется вашу ветку с другим именем, освобождая оригинальное название.fetch
Строка извлекает последнюю копию пульта дистанционного управления.checkout
Линия воссоздает исходную ветвь в качестве отслеживания отрасли.Или как функция bash:
который переименовывает текущую ветку во что-то вроде replace_master_98d258f.
источник
git stash pop
в этот рабочий процесс. Если вы хотите повторно применить ваши спрятанные файлы.Я немного удивлен, что никто еще не упомянул об этом; Я использую это почти каждый день
По сути,
@{u}
это просто сокращение для ветки upstream, которую отслеживает ваша текущая ветка. Например, это обычно приравнивается кorigin/[my-current-branch-name]
. Это приятно, потому что это отраслевой агностик.Обязательно
git fetch
сначала получите самую последнюю копию удаленной ветки.источник
Это может быть сделано несколькими способами, продолжая редактировать этот ответ для распространения лучшего знания перспективы.
1) Сбросить сильно
Если вы работаете из удаленной ветки разработки, вы можете сбросить HEAD до последнего коммита в удаленной ветке, как показано ниже:
2) Удалить текущую ветку и снова оформить заказ из удаленного хранилища.
Учитывая, что вы работаете над веткой разработки в локальном репо, которая синхронизируется с удаленной веткой / веткой разработки, вы можете сделать следующее:
3) Прервать слияние
Если вы находитесь в промежутке между неудачным слиянием (ошибочно сделанным с неправильной ветвью) и хотите избежать слияния, чтобы вернуться к последней ветке, как показано ниже:
4) Отменить ребаз
Если вы находитесь между неудачной перебазировкой, вы можете прервать запрос на перебазирование, как показано ниже:
источник
Вы можете сделать, как сказал @Hugo из @Laurent, или вы можете использовать
git rebase
для удаления коммиты, от которых хотите избавиться, если знаете, какие. Я склонен использоватьgit rebase -i head~N
(где N - число, позволяющее вам манипулировать последними N коммитами) для такого рода операций.источник
Выбранный ответ является абсолютно правильным , однако он не оставил меня с последней фиксацией / толчков ...
Итак, для меня:
Так как я знаю, что хочу временно установить свою ветвь upstream на несколько недель на определенную ветку (такую же, как та, на которую я переключился / проверил ранее и сделал полный сброс)
Так ПОСЛЕ сброса
источник
Если вы хотите обновить ветку, которая в данный момент не извлечена, вы можете сделать:
источник
Как указано в выбранном объяснении, сброс git хорош. Но в настоящее время мы часто используем подмодули: репозитории внутри репозиториев. Например, если вы используете ZF3 и jQuery в своем проекте, вы, скорее всего, захотите, чтобы они были клонированы из своих исходных репозиториев. В таком случае сброса мерзавца недостаточно. Нам нужно обновить подмодули до той точной версии, которая определена в нашем репозитории:
это то же самое, что вы (cd) рекурсивно попадете в рабочий каталог каждого подмодуля и запустите:
И это очень отличается от
потому что подмодули указывают не на ветвление, а на фиксацию.
В тех случаях, когда вы вручную извлекаете какую-то ветку для одного или нескольких подмодулей, вы можете запустить
источник
git reset --hard
. Это добавляет мало значения.Это сработало для меня - очистка показала все файлы, которые были удалены. Если он говорит вам, что вы потеряете изменения, вам нужно спрятать.
источник
Уродливый, но более простой способ: удалите свою локальную папку и снова клонируйте удаленный репозиторий.
источник