2010-08-07 2 views
1

У меня есть локальная ветка, которая отслеживает удаленную ветку на git. В какой-то момент я обновляю файл «x.out», но, работая над этой веткой, я пытаюсь извлечь из последних изменений в сервере. Кто-то еще уже обновил «x.out» и git, сообщает мне, что «cann't overwrite file» (или так), поэтому я должен добавить свои изменения в индекс и ТАКЖЕ совершить мое изменение, прежде чем вы сможете добиться успеха.Git - слияние с удаленной локальной веткой при обновлении того же файла

  1. Проблема в том, что при таком подходе приводит к 2 фиксаций в хранилище: один совершить для моего локального изменения (потому что у меня была старая версия от сервера «x.out») и один совершить после того, как я " git добавляет «мой модифицированный файл x.out» (который в основном связан с «слиянием» ..)

  2. Я не хочу, чтобы эти 2 шага совершались (журналы выглядят ужасно) - трудно следить за тем, что должно были единственной фиксацией. Разве нет способа, как в SVN/Perforce сказать, когда вытягиваете, что я хочу, чтобы мой локальный модифицированный файл слился с тем, что с сервера (если автоматическое слияние возможно, если не объединить конфликт?) Таким образом, когда вы снова надавливаете на удаленный это только лишь 1 совершить и не 2 совершает ...

ответ

3

Вы должны внести изменения и очистить конфликты (если есть) локально.

$ git pull 
... 
file foobar not up to date, cannot merge. 
$ git stash 
$ git pull 
$ git stash pop 

А затем удалите конфликт и добавьте файл.

+0

правый. Это то, что я хотел. Таким образом, можно напрямую работать с веткой отслеживания и тянуть по его усмотрению. Благодаря ! – Ghita

2

Вы можете попробовать git pull --rebase, что может облегчить ситуацию несколько.

В общем, действительно, нет ничего плохого в том, что у вас есть дополнительная фиксация. Просто получите приложение, например, gitk или gitg, которые прекрасно видят журнал.

+0

Фактически после нескольких дней игры с такой ситуацией я пришел к выводу, что перезагрузка решает эту проблему. – Ghita

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