мерзавец, возвращаясь пару коммитов на ветке - PullRequest
1 голос
/ 12 августа 2011

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

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

Ответы [ 4 ]

1 голос
/ 12 августа 2011

У вас есть несколько вариантов. Я бы порекомендовал git revert, если вы хотите отменить изменения. Возврат - это как отмена работы; это в основном делает коммит, который отменяет существующий коммит. Хорошая часть этого заключается в том, что если вы позже передумаете, вы можете отменить возврат!

Если вы хотите отменить более одного коммита, что звучит так, как вы хотите, синтаксис выглядит примерно так:

git revert branchname~5..branchname~3

Это вернет 5-й последний коммит до 3-го последнего коммита. git revert немедленно совершит возврат. Если вы хотите увидеть изменения, которые он внесет перед фиксацией; затем вы можете указать --no-commit, а затем зафиксировать его позже, используя git commit.

Вы также можете отменить отдельные коммиты следующим образом:

git revert branchname~5

Если вы хотите увидеть все сделанные вами коммиты, вы можете использовать git log.

И, наконец, используя git log, вы можете увидеть хеш коммита. git-revert также может принимать хеш, поэтому вам не нужно считать, сколько ревизий у него есть.

git revert sha1hashhere
1 голос
/ 12 августа 2011

Поскольку вы работаете в одиночку, самый простой способ (а также сохранить вашу историю в чистоте) будет:

git reset --hard <commit hash of the commit before the commits you want to discard>

Чтобы получить хеш, используйте git log (или git log --pretty=oneline) Если вы этого не сделаетехотите использовать хеш, но знайте, что это четыре коммита из HEAD, вы используете нотации, такие как HEAD~4

или делаете git rebase -i <hash as above> и удаляете строки, представляющие коммиты, которые вы хотите удалить, и выполняете ребаз.*

Если вы хотите сохранить историю (а также если вы работали с другими людьми, были переведены на удаленный компьютер и т. Д.) git revert является более безопасным решением.

0 голосов
/ 12 августа 2011

Если вы согласны с удалением нежелательных коммитов

  1. Найдите общего родителя, который есть у обоих. Вы можете пропустить этот шаг, если вы знаете, далеко назад вы хотите пойти.
    git merge-base featureBranch masterBranch
  2. Оформить заказ на свой филиал
    git checkout featureBranch
  3. Rebaseэта ветвь, удаляя коммиты, которые вам не нужны (удаляйте строки, которые содержат ваши нежелательные коммиты, когда всплывает ваш редактор.
    git rebase -i sha_from_step_1, или вы можете использовать git rebase -i HEAD@{n}, где n - это как далеко назад вы хотите пойти.
  4. Слияние с мастером
    git merge master
0 голосов
/ 12 августа 2011

один комит обратно = ГОЛОВА ^

два коммита назад = HEAD ^^

читать карту "man gitrevisions"

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