Нажимайте изменения в github без натяжения
У меня есть глупость. Я разработал проект, который был разработан другими разработчиками. Я отправил свои источники в предыдущие разработчики, чтобы внести изменения в их источники. Но они сказали, что они никогда не работают с git. Поэтому они добавили изменения в проекты, и это настоящая версия прямо сейчас. Но это не под кодом контроля версий.
Поэтому я уже беру на себя ответственность за github, и мне нужно нажать эту новую версию.
Что я сделал:
- git init
- git удаленное добавление источника
- git add.
- git push origin master
Но вот проблема, я не могу выдвигать новые изменения, прежде чем обновлять локальное репо, конечно. Но если я обновляю свое репо, он вернет все файлы, которые были удалены предыдущими разработчиками.
Мой вопрос: как нажимать текущую версию, не вытягивая данные из git.
Я знаю комическую ситуацию, но мне нужна помощь здесь.
благодаря
Ответы
Ответ 1
Кажется, что другие люди работали над вашим проектом вне контроля версий, то есть над открытыми файлами и папками.
Я бы предложил вам клонировать репозиторий, скопировать (и, следовательно, заменить) клонированный контент новым контентом, зафиксировать и отправить эти изменения.
Используемые вами текущие команды git init
и т.д. Создают совершенно новые репозитории, а это не то, что вам нужно.
Ответ 2
Вы можете сделать принудительный толчок.
git push -f origin branch_name
Принудительное нажатие стирает всю историю фиксации ветки удаленного репозитория и заменяет ее на вашу ветку.
Проверьте ответы для принудительных толчков здесь. Принудительный толчок может иметь непреднамеренные последствия, поэтому проверьте на то же.
редактировать
Принудительный толчок будет неправильным способом подталкивания материала в вашем случае, поскольку у вас уже есть предыдущие фиксации в github, и это приведет к стиранию истории фиксации для предыдущих коммитов.
Следовательно, чтобы сохранить историю фиксации, вы можете сделать следующее:
Удалите все файлы из репозитория git, а затем добавьте сюда новые файлы, а затем зафиксируйте обновленные файлы
git rm -rf .
cp -r path/to/updated/code/* .
git add .
Выполнение git status
теперь скажет вам, какие файлы, которые другие разработчики изменили, и git diff
чтобы увидеть, что все изменения есть.
Если файл остается неизменным, то git rm
и git add
аннулируют эффект друг друга.
Файлы, удаленные этими разработчиками, будут удалены, поскольку вы запустили git rm
для них, но не git add
.
Как только вы убедитесь, что это действительно изменения, вы можете
git commit -m "Merged new code"
Потенциальные ошибки
- Изменен только режим файла (755 <=> 644) - в зависимости от того, какой код вы отправили другим разработчикам
- Вы потеряете файл.gitignore с
git rm -rf.
(и аналогично. .gitattributes
и другие подобные файлы). Сбросьте HEAD для каждого такого файла, используя git reset HEAD.gitignore
перед фиксацией. - Различные символы завершения строки (в случае использования различных сред разработки), поэтому проверьте их соответствующим образом.
Ответ 3
Вы можете попробовать git stash
, который сделает снимок вашего рабочего дерева. Затем вы можете вытащить изменения из github. От man git stash
:
Используйте git stash, когда вы хотите записать текущее состояние рабочего каталога и индекс, но хотите вернуться в чистый рабочий каталог. Команда сохраняет локальные модификации и возвращает рабочий каталог в соответствии с фиксацией HEAD.
Так:
git stash
git pull [email protected]/myrepo.git
git stash apply
git commit -a