Есть ли в Git рабочий процесс для «перезапуска» вашего проекта? - PullRequest
0 голосов
/ 01 января 2011

Я уже немного пользуюсь Git, и мне действительно это нравится, но одна вещь, которую я не смог понять.Я сталкиваюсь с этим сценарием почти каждый раз, когда начинаю проект, в котором я не знаю, во что ввязываюсь (в данном случае Node.js):

Я довольно далеко продвигаюсь в проекте, совершаякак хороший гражданин Git.Тогда я по-королевски испорчу ... или понимаю, что не могу спасти свой текущий код.Я хочу начать все сначала, но, потому что я анальный, я не хочу потерять свои коммиты.Есть ли способ «передать» git коммиты в этот новый проект?

РЕДАКТИРОВАТЬ: Спасибо за быстрый ответ - я забыл добавить.Этот новый проект будет находиться в новой базовой папке, которая находится за пределами git-репо.Могу ли я просто скопировать git-репо в этот каталог?Удаление файлов и последующая фиксация не будут работать для меня, потому что я беру рабочие фрагменты из предыдущего проекта при переходе в новый проект.

Спасибо!Мэтт Мюллер

Ответы [ 4 ]

1 голос
/ 01 января 2011

Ну, это зависит от того, как именно вы хотите вернуться в хорошее состояние.

Если вы просто хотите списать некоторые предыдущие коммиты (единицы работы), смешанные с хорошими, используйте git rebase -i HEAD~10 ... увеличьте «10», чтобы оказаться достаточно далеко назад, и удалите коммиты, которые являются ненужными.

Если вы хотите вернуть один файл к более старой версии, выполните git checkout HEAD~10 -- Node.js, чтобы перенести его в текущую рабочую область, а затем зафиксировать это, говоря, что вы отменяете все изменения, так как ... у вас есть идея.

Если вы просто хотите удалить несколько недавних коммитов, вы можете git reset --hard HEAD~10 или что-то еще, чтобы вернуться к этой старой версии.

1 голос
/ 01 января 2011

У вас уже есть основа вашего кода в начальном коммите.

Один из способов сделать это - добавить тег в кончик вашей текущей ветки, а затем использовать git-reset --hard для поддержки вашего проекта.в самом начале, а затем продолжить.

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

1 голос
/ 01 января 2011

@ matt, вы можете создать новую ветку на текущем мастере (или любой другой ветке), а затем выполнить

git reset --hard HEAD~n

, где n - это количество коммитов назад, которое вы хотите перейти.но будьте осторожны, убедитесь, что новая ветвь имеет коммиты, которые вы хотите, прежде чем перезагружать своего мастера, так как хард ресет уносит их (я думаю).

Вы также можете вернуться к конкретному коммиту через его хэш sha1, синтаксис должен быть похожим.

0 голосов
/ 21 августа 2012

Вы можете скопировать старое git-репо, переименовать старые ветки (чтобы избежать путаницы в будущем), а затем использовать git cherry-pick [rev] или git checkout [rev] -- [filename] в зависимости от того, хотите ли вычтобы выбрать конкретные коммиты или получить файлы, как они были в определенном состоянии.В качестве третьей возможности вы можете git rebase --interactive, чтобы устранить нарушенные коммиты и переставить другие в соответствии с вашими потребностями.

Я также могу рекомендовать использовать рабочий процесс, описанный в Успешное ветвление Gitмодель , т. е. (среди прочих предложений) используйте одноразовые ветви для экспериментальных функций и не объединяйте их, пока не убедитесь, что они в порядке:

http://nvie.com/img/2009/12/Screen-shot-2009-12-24-at-11.32.03.png

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