Нажимайте изменения в github без натяжения

У меня есть глупость. Я разработал проект, который был разработан другими разработчиками. Я отправил свои источники в предыдущие разработчики, чтобы внести изменения в их источники. Но они сказали, что они никогда не работают с git. Поэтому они добавили изменения в проекты, и это настоящая версия прямо сейчас. Но это не под кодом контроля версий.

Поэтому я уже беру на себя ответственность за github, и мне нужно нажать эту новую версию.

Что я сделал:

  1. git init
  2. git удаленное добавление источника
  3. git add.
  4. 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"

Потенциальные ошибки

  1. Изменен только режим файла (755 <=> 644) - в зависимости от того, какой код вы отправили другим разработчикам
  2. Вы потеряете файл.gitignore с git rm -rf. (и аналогично. .gitattributes и другие подобные файлы). Сбросьте HEAD для каждого такого файла, используя git reset HEAD.gitignore перед фиксацией.
  3. Различные символы завершения строки (в случае использования различных сред разработки), поэтому проверьте их соответствующим образом.

Ответ 3

Вы можете попробовать git stash, который сделает снимок вашего рабочего дерева. Затем вы можете вытащить изменения из github. От man git stash:

Используйте git stash, когда вы хотите записать текущее состояние рабочего каталога и индекс, но хотите вернуться в чистый рабочий каталог. Команда сохраняет локальные модификации и возвращает рабочий каталог в соответствии с фиксацией HEAD.

Так:

git stash
git pull [email protected]/myrepo.git
git stash apply
git commit -a