2016-09-26 3 views
0

У меня есть ветвь B, которая была проверена в другом репо, затем были сделаны некоторые изменения и после переустановки они были нажаты с помощью --force (это было исправление до последнего фиксации). Теперь, если я вытащил измененную ветвь в первое репо, я получаю конфликты слияния.вытащить после того, как результаты банализации были объединены в конфликты

Команды я бег (с нерелевантными изменениями, которые упрощают фактический выход) следующим образом:

# First checkout the original B 
$ pwd 
/home/user/dir1 

$ git checkout B 
Switched to branch 'B' 
Your branch is up-to-date with 'origin/B'. 

# Now clone the same repo into another directory and checkout B there 
$ cd .. && git clone git clone ssh://[email protected]/myrepo.git dir2 && cd dir2 

$ git checkout B 
Switched to branch 'B' 
Your branch is up-to-date with 'origin/B'. 

# Now edit some file, commit it and "merge" the changes 
# to the originally last commit as a fixup 
$ nano file.txt 
$ git commit -a -m "Fixup to file.txt" 
$ git rebase -i HEAD~2 
... the last commit is "fixup'ed" to the last commit in the original branch (the commit before "Fixup to the file.txt" commit 

# Push the B with rewritten history to the upstream 
$ git push --force origin B 

# Get back to the original repo and pull the changes 
$ cd ../dir1 
$ git pull origin B 
... 
CONFLICT (content): Merge conflict in .../file.txt 
... 

Единственное различие между двумя копиями филиала находится в «верхние» совершить. Можно ли сообщить git, что я хочу заменить последнее коммит в первом репо тем, что у меня есть в восходящем потоке, без git-pull, пытаясь заглянуть внутрь для изменений в соответствующих файлах?

+0

Вы можете перефразировать вопрос и использовать имена для филиалов, пультов дистанционного управления и важных фиксаций? –

ответ

0

С историей, как

...-A-B-C-D-E  # HEAD 

Где E является неизменной фиксации в dir/. Мы введем E' в качестве фиксации, которая возникла из E, но была переустановлена ​​и принудительно нажата с dir2.

В dir вы можете перемотать HEAD быть на до фиксации:

git reset --hard HEAD^ 

получить

...-A-B-C-D  # HEAD 
      \ 
      `-E # dangling and invisible, will be garbage collected 

после

git pull upstream B 

даст вам все, что было там

...-A-B-C-D-E'  # HEAD 
      \ 
      `-E # dangling and invisible, will be garbage collected 

Будьте осторожны, хотя, вы будете терять содержание E (если не искать его в reflog)

+0

ну, весь контент, который имеет значение, был отодвинут вверх по течению от второй копии. Итак, единственное, что мне нужно, это получить те же данные в первой ветви, что и во втором и в восходящем потоке. – Student4K

+0

Возможно, я неправильно понял ваш вопрос. См. Мой другой комментарий. –

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