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"
Попытка: 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) созданный различным инструментом.
При создании частых маленьких фиксаций то запустите путем рассмотрения комментариев фиксации с 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
завершит Ваше слияние.
Определяют, какие файлы находятся в конфликте (Мерзавец должен сказать Вам это).
Открытый каждый файл и исследуют diffs; Мерзавец разграничивает их. Надо надеяться, это будет очевидно который версия каждого блока сохранить. Вы, возможно, должны обсудить его с поддерживающими разработчиками, которые фиксировали код.
, Как только Вы разрешили конфликт в файле git add the_file
.
, Как только Вы решили весь конфликты, сделайте git rebase --continue
или безотносительно команды Git, которая, как сказали, сделала, когда Вы завершились.
Проверьте ответы в вопросе о Переполнении стека Прерывание слияния в Мерзавце , особенно ответ 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
Я использую Визуальный Код Microsoft для разрешения конфликтов. Его очень простое для использования. Я сохраняю свой проект открытым в рабочей области. Это обнаруживает и выделяет конфликты, кроме того, дайте опции GUI выбрать безотносительно изменения, я хочу удержаться от ГОЛОВЫ или поступления.
Вот вероятный вариант использования, сверху:
Вы собираетесь внести некоторые изменения, но, к сожалению, вы не в курсе:
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.
Та-да!