Могу ли я сделать коммит git ниже существующих коммитов, не сохраняя его содержимое в следующем коммите? (просто чтобы иметь код в истории) - PullRequest
0 голосов
/ 21 апреля 2020

Раньше я работал над проектом с моей командой, и мы использовали SVN для контроля версий, прежде чем перейти к git, и теперь история SVN давно ушла. У меня есть исходные коды, с которыми мы начали работать, и я хочу, чтобы они отображались в истории git, чтобы я мог видеть изменения, которые мы внесли в git или IDE.

Чтобы сделать это, я должен быть в состоянии поместить исходные источники ниже существующих коммитов, ничего не сохраняя.

Как выглядит история сейчас:

  1. добавить README
  2. добавить новые источники
  3. изменить 1
  4. изменить 2
  5. ...

Как Я хочу, чтобы это выглядело так:

  1. добавить README
  2. добавить старые источники
  3. добавить новые источники
  4. изменить 1
  5. изменить 2
  6. ...

Мы также удалили или переименовали многие файлы, и я не хочу, чтобы они принадлежали текущему состоянию репозитория. Лучшее, что я мог сделать, это проверить коммит readme в новой ветке, поместить поверх него старые источники и затем объединить мастер в ветку, используя их стратегию перезаписи файлов. Я мог видеть старые источники как второй коммит, а затем коммит слияния поверх последнего изменения. Он сохранил удаленные или переименованные файлы и не отображал историю существующих.

Можно ли вообще это сделать, не восстанавливая весь репо?

1 Ответ

1 голос
/ 21 апреля 2020

Я не совсем понимаю, что вы хотите .... но если я правильно понимаю, вы хотите добавить старые источники перед новыми ... и вы переместили много файлов между старыми и новыми источниками, верно?

Хорошо .... сделайте это:

git checkout -b temp revision1
// put the _old_ sources here
git add .
git commit -m "Old sources"
git checkout revision2 # where you have the new sources
git reset --soft temp # set the branch pointer in "old sources keep all files the way they are, everything that changed will be in index... even moved files
git commit -m "new sources¨
# let's move temp branch's pointer
git branch -f temp
git checkout temp
# now we replicate the other changes from master (master, right?)
git cherry-pick revision2..master
# if you like the result
git branch -f master # set master over here
git checkout master
git branch -d temp

И все готово

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...