Подтвердить что ты не робот

Git: в настоящее время происходит слияние/конфликт с частным удаленным репо. Как сообщить Git просто использовать мои локальные файлы?

Попытка использовать/узнать git с помощью личного проекта. Там только я и удаленный репозиторий git, несколько коммитов, и я застрял в неудавшемся слиянии. У многих моих файлов теперь есть git слияние разметки конфликтов.

Как мне сказать git просто выбросить все, просто используйте мой?

Конкретный пример того, как я попал в состояние, в котором я:

echo A new file > myFile.txt             # example file
git add myFile.txt                       # add file
git commit                               # commit changes
git push                                 # push changes to remote repo
echo A conflicting edit > myFile.txt     # oh, no, forgot some changes
git add myFile.txt                       # add again
git commit --amend                       # amend previous commit
git push                                 # fails. Git suggests to do a pull first
git pull origin HEAD                     # "Automatic merge failed" Now what?
                                         # Just use what I have locally!
4b9b3361

Ответ 1

git checkout --ours . # checkout our local version of all files
git add -u            # mark all conflicted files as merged/resolved
git commit            # commit the merge

Существует грязная альтернатива, которая может нарушить репо для всех остальных, используя тот же самый отдаленный источник. Учитывайте это только в том случае, если вы используете его только:

git reset --hard HEAD # undo that failed merge
git push --force      # replace everything remote with local

Объяснение (теперь я лучше понимаю git)
Причина этого в том, что внесение изменений фиксирует историю изменений. Выполнение этого локально безопасно, потому что это не влияет ни на кого другого. Тем не менее, исправление коммитов, которые уже были нажаты, влияет на другие репозитории и небезопасно.

Ответ 2

Ваш графический интерфейс, вероятно, просто устанавливает --strategy=ours (git merge -s ours <branch>). Это выполнит слияние, ссылаясь на оба фиксации как на родителей, но сохранит все ваше состояние каталога.

Другой вариант - использовать git merge -s recursive -X ours <branch>, который будет пытаться вносить файлы из обоих ветвей, но предпочитает вашу версию всякий раз, когда есть конфликт.

Docs

Вы можете увидеть два разных стиля при работе с помощью следующей демонстрационной оболочки script:

#!/bin/sh

mkdir gittest
cd gittest
git init

git checkout master
echo "Line one" > bar
git add bar
git commit -m "Original commit"

git checkout -b fork1
echo "Line one and something" > bar
echo "Line two" > bam
git add bar bam
git commit -m "Fork1 commit."

git checkout master
git checkout -b fork2
echo "Line one and other stuff" > bar
echo "Line three" > baz
git add bar baz
git commit -m "Fork2 commit."

git checkout fork1
if [ "$1" = "ours" ]; then
  # `ls gittest` => bam bar
  # `cat gittest/bar` => Line one and something
  git merge -s ours fork2
else
  # `ls gittest` => bam bar baz
  # `cat gittest/bar` => Line one and something
  git merge -X ours fork2
fi