Как разрешить конфликты слияния в Git

a <- as.Date(data$initialDiagnose,format="%m/%d/%Y") # Produces NA when format is not "%m/%d/%Y"
b <- as.Date(data$initialDiagnose,format="%d.%m.%Y") # Produces NA when format is not "%d.%m.%Y"
a[is.na(a)] <- b[!is.na(b)] # Combine both while keeping their ranks
data$initialDiagnose <- a # Put it back in your dataframe
data$initialDiagnose
[1] "2009-01-14" "2005-09-22" "2010-04-21" "2010-01-28" "2009-01-09" "2005-03-28" "2005-01-04" "2005-01-04" "2010-09-17" "2010-01-03"

Дополнительный подход - это предыдущий метод, адаптированный к ситуации, когда у вас есть три (или более) разных формата:

data$initialDiagnose
[1] 14.01.2009 9/22/2005  12 Mar 97  4/21/2010  28.01.2010 09.01.2009 3/28/2005 
Levels: 09.01.2009 12 Mar 97 14.01.2009 28.01.2010 3/28/2005 4/21/2010 9/22/2005

multidate <- function(data, formats){
    a<-list()
    for(i in 1:length(formats)){
        a[[i]]<- as.Date(data,format=formats[i])
        a[[1]][!is.na(a[[i]])]<-a[[i]][!is.na(a[[i]])]
        }
    a[[1]]
    }

data$initialDiagnose <- multidate(data$initialDiagnose, 
                                  c("%m/%d/%Y","%d.%m.%Y","%d %b %y"))
data$initialDiagnose
[1] "2009-01-14" "2005-09-22" "1997-03-12" "2010-04-21" "2010-01-28" "2009-01-09" "2005-03-28"
4502
задан TylerH 15 May 2019 в 21:21
поделиться

6 ответов

Попытка: git mergetool

Это открывает GUI, который ступает Вы посредством каждого конфликта, и Вы добираетесь, чтобы выбрать, как объединиться. Иногда требуется немного ручного редактирования впоследствии, но обычно это достаточно отдельно. Это намного лучше, чем выполнение всего этого вручную, конечно.

Согласно комментарию @JoshGlover:

команда не обязательно открывает GUI, если Вы не устанавливаете тот. Выполнение git mergetool для меня привело к vimdiff используемый. Можно установить один из следующих инструментов для использования его вместо этого: meld, opendiff, kdiff3, tkdiff, xxdiff, tortoisemerge, gvimdiff, diffuse, ecmerge, p4merge, araxis, vimdiff, emerge.

Ниже демонстрационная процедура для использования vimdiff для конфликтов слияния твердости. На основе [1 126] эта ссылка

Шаг 1 : Выполненный после команд в Вашем терминале

git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false

Это установит vimdiff как инструмент слияния по умолчанию.

Шаг 2 : Выполненный после команды на Шаге 3 терминала

git mergetool

: Вы будете видеть, что vimdiff отображается в следующем формате

  ╔═══════╦══════╦════════╗
  ║       ║      ║        ║
  ║ LOCAL ║ BASE ║ REMOTE ║
  ║       ║      ║        ║
  ╠═══════╩══════╩════════╣
  ║                       ║
  ║        MERGED         ║
  ║                       ║
  ╚═══════════════════════╝

, который Эти 4 представления

ЛОКАЛЬНЫЙ вЂ “, это - файл от текущего ответвления

ОСНОВА †“общий предок, как файл смотрел перед обоими изменениями

УДАЛЕННЫЙ вЂ “файл Вы объединяетесь в свое ответвление

, ОБЪЕДИНИЛ вЂ “результат слияния, это - то, что сохраняется в repo

, по которому можно переместиться среди этих представлений с помощью ctrl + w . Можно непосредственно достигнуть представления MERGED с помощью ctrl + w сопровождаемый j .

[еще 1145] информация о vimdiff навигации
здесь и здесь

Шаг 4 . Вы могли отредактировать представление MERGED следующий путь

, Если Вы хотите получить изменения от УДАЛЕННОГО

:diffg RE  

, Если Вы хотите получить изменения от ОСНОВЫ

:diffg BA  

, Если Вы хотите получить изменения от ЛОКАЛЬНОГО

:diffg LO 

Шаг 5 . Сохраните, Выход, Фиксация и Вымойтесь

:wqa, сохраняют и выходят от vi

git commit -m "message"

git clean, Удаляют дополнительные файлы (например, *.orig) созданный различным инструментом.

2718
ответ дан Fozoro 15 May 2019 в 21:21
поделиться

При создании частых маленьких фиксаций то запустите путем рассмотрения комментариев фиксации с git log --merge. Тогда git diff покажет Вам конфликты.

Для конфликтов, которые включают больше, чем несколько строк, легче видеть то, что продолжается во внешнем инструменте GUI. Мне нравится opendiff - Мерзавец также поддерживает vimdiff, gvimdiff, kdiff3, tkdiff, комбинация, xxdiff, появитесь из поля, и можно установить других: git config merge.tool "your.tool" установит Ваш выбранный инструмент и затем git mergetool после того, как неудавшееся слияние покажет Вам diffs в контексте.

Каждый раз, когда Вы редактируете файл для разрешения, конфликт, git add filename обновит индекс, и разность больше не будет показывать его. Когда все конфликты обрабатываются, и их файлы были git add - редактор, git commit завершит Ваше слияние.

77
ответ дан Peter Mortensen 15 May 2019 в 21:21
поделиться
  1. Определяют, какие файлы находятся в конфликте (Мерзавец должен сказать Вам это).

  2. Открытый каждый файл и исследуют diffs; Мерзавец разграничивает их. Надо надеяться, это будет очевидно который версия каждого блока сохранить. Вы, возможно, должны обсудить его с поддерживающими разработчиками, которые фиксировали код.

  3. , Как только Вы разрешили конфликт в файле git add the_file.

  4. , Как только Вы решили весь конфликты, сделайте git rebase --continue или безотносительно команды Git, которая, как сказали, сделала, когда Вы завершились.

337
ответ дан davetron5000 15 May 2019 в 21:21
поделиться
  • 1
    Если это не является окончательным, и ORM не вынужден использовать конструктора для инициализации вещей экземпляра, становятся более сложными, что они должны ( stackoverflow.com/questions/1624392/… ). – Thomas Jung 23 April 2010 в 13:31

Проверьте ответы в вопросе о Переполнении стека Прерывание слияния в Мерзавце , особенно ответ Charles Bailey , который показывает, как просмотреть различные версии файла с проблемами, например,

# Common base version of the file.
git show :1:some_file.cpp

# 'Ours' version of the file.
git show :2:some_file.cpp

# 'Theirs' version of the file.
git show :3:some_file.cpp
103
ответ дан Community 15 May 2019 в 21:21
поделиться
  • 1
    Посмотрите редактирование. Проблема не находится в части персистентности, а в слоях, которые основываются на объектах области. – Thomas Jung 24 April 2010 в 07:06

Я использую Визуальный Код Microsoft для разрешения конфликтов. Его очень простое для использования. Я сохраняю свой проект открытым в рабочей области. Это обнаруживает и выделяет конфликты, кроме того, дайте опции GUI выбрать безотносительно изменения, я хочу удержаться от ГОЛОВЫ или поступления. enter image description here

0
ответ дан Ammar Mujeeb 4 October 2019 в 06:59
поделиться

Вот вероятный вариант использования, сверху:

Вы собираетесь внести некоторые изменения, но, к сожалению, вы не в курсе:

git fetch origin
git pull origin master

From ssh://gitosis@example.com:22/projectname
 * branch            master     -> FETCH_HEAD
Updating a030c3a..ee25213
error: Entry 'filename.c' not uptodate. Cannot merge.

Итак, вы получаете обновите и попробуйте еще раз, но возник конфликт:

git add filename.c
git commit -m "made some wild and crazy changes"
git pull origin master

From ssh://gitosis@example.com:22/projectname
 * branch            master     -> FETCH_HEAD
Auto-merging filename.c
CONFLICT (content): Merge conflict in filename.c
Automatic merge failed; fix conflicts and then commit the result.

Итак, вы решили взглянуть на изменения:

git mergetool

Ой, боже мой, апстрим изменил некоторые вещи, но просто чтобы использовать мои изменения .. .нет ... их изменения ...

git checkout --ours filename.c
git checkout --theirs filename.c
git add filename.c
git commit -m "using theirs"

А потом мы попробуем в последний раз

git pull origin master

From ssh://gitosis@example.com:22/projectname
 * branch            master     -> FETCH_HEAD
Already up-to-date.

Та-да!

1667
ответ дан 22 November 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: