Подтвердить что ты не робот

Как занести мой предыдущий коммит?

У меня есть следующая ситуация на моем git log:

commit 111  <-- need to push it to the repository

commit 222  <-- need to stash this one

...

Как вы можете видеть, мне нужно нажать только последний (без предыдущего) фиксации в репозиторий.

Как я могу это сделать? git revert --soft commit_hash поможет мне?

Спасибо!

4b9b3361

Ответ 1

Если вы не нажали на фиксацию в удаленном репозитории, вы можете использовать интерактивную перезагрузку для "переупорядочения" ваших коммитов и сбрасывать только новые (недавние) изменения фиксации.

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

git rebase -i HEAD~2

Это откроет ваш редактор по умолчанию, перечисляя последние 2 коммита и предоставит вам некоторые инструкции. Будьте очень осторожны относительно того, что вы здесь делаете, так как вы собираетесь "переписать" историю своего репозитория и можете потерять работу, если не будете осторожны (сначала сделайте резервную копию всего хранилища, если это необходимо). Я оценил хэши/заголовки ниже, например,

pick 222 commit to be stashed
pick 111 commit to be pushed to remote

# Rebase 111..222 onto 333
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

Измените порядок двух коммитов (они указаны как oldest = > newest) следующим образом:

pick 111 commit to be pushed to remote
pick 222 commit to be stashed

Сохранить и выйти, после чего git выполнит некоторую обработку, чтобы переписать две измененные вами коммиты. Предполагая, что нет проблем, вы должны обратить вспять порядок ваших двух наборов изменений. Это можно подтвердить с помощью git log --pretty=oneline -5, который будет выводить самую новую информацию.

На этом этапе вы можете просто сделать soft- reset в самом последнем коммите и занести свои рабочие изменения:

git reset --soft HEAD~1
git stash

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

Ответ 2

Если бы это был я, я бы избегал любого рискованного редактирования редактирования и вместо этого делал следующее:

  • Создайте новую ветку на SHA, где было выполнено 222, в основном как закладка.

  • Вернитесь к основной ветке. В нем верните фиксацию 222.

  • Нажмите все сделанные коммиты, которые будут только нажимать commit 111, потому что 222 было отменено.

  • Работайте с веткой с шага № 1, если необходимо. Слейте с багажника на него, если необходимо, чтобы поддерживать его в актуальном состоянии. Я бы не стал утруждать себя.

Когда это время для изменений в фиксации 222 для входа, эта ветка может быть объединена с магистралью.

Ответ 3

Это работает для меня;

  • Checkout on commit, который является источником текущей ветки.
  • Создайте новую ветку из этой фиксации.
  • Оформить покупку в новую ветку.
  • Объединить ветку с кодом для сохранения в новой ветке.
  • Сделайте мягким reset в новой ветке.
  • Спрячьте целевой код.
  • Удалить новую ветку.

Я рекомендую использовать для этого нечто вроде SourceTree.