smartgit удалить фиксацию и вернуться к предыдущей фиксации

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

При попытке оформить заказ:

введите описание изображения здесь

Как мой журнал выглядит на данный момент:

введите описание изображения здесь

Что я хочу сделать, так это удалить первые две фиксации из журнала и вернуться к фиксации «Cambios Varios» (тот, что с зеленой стрелкой, которая, кстати, появилась, когда я пытался проверить эту фиксацию).

Весь этот беспорядок был из-за того, что мой коллега внес некоторые изменения и добавил файл, а затем зафиксировал свои изменения, чтобы обновить мои файлы, я сделал извлечение, но мои файлы не обновились в моем локальном репозитории и не добавил файл, который был добавил мой коллега. Есть ли что-то еще, что мне нужно сделать, чтобы обновить все мои папки, когда другой пользователь делает фиксацию, кроме PULL? Я довольно новичок в SmartGit, и каждый раз, когда я пытаюсь сделать чистую тягу, я немного сбиваюсь с толку. Большое спасибо !


person Lowtrux    schedule 04.09.2015    source источник


Ответы (2)


То, что вы спрашиваете, относится не только к SmartGit, но и к GIT в целом. SmartGit — это просто клиент, хотя и очень удобный и полнофункциональный. В вашей ситуации вы должны учитывать несколько особенностей GIT:

  1. ветви
  2. Опубликованные коммиты
  3. Отделенная голова
  4. Переписывая удаленную историю

Google на них, чтобы получить дополнительную информацию. Теперь давайте назовем ваши коммиты:

введите здесь описание изображения

Вы по-прежнему видите коммит A, потому что на него указывает ветка. Это ваш местный филиал master. Вы можете сбросить эту ветку на любой коммит, который вам нравится. В SmartGit для этого просто нажмите на эту зеленую метку ветки и перетащите ее на любой другой коммит. Вот и все. Например. сбросьте его на коммит B, на который указывает origin/master, и вы больше не увидите этот коммит в своем журнале, потому что нет ветки, из которой он может быть достигнут.

Строго говоря, вы можете проделать тот же трюк со своей веткой origin/master, вы можете сбросить ее на любой другой коммит. Но с ним нужно быть очень осторожным, потому что он указывает на фиксацию B, которая опубликована. т.е. кто-нибудь может натянуть его на свою машину. Если вы не можете сказать наверняка, вы не можете сбросить ветку из опубликованного коммита, не рискуя сломать чью-то копию репо.

Таким образом, простой ответ: вы не можете вернуть репозиторий к коммиту C, как вы хотите, потому что это может конфликтовать с репозиториями, клонированными на других машинах. Более длинный ответ: вы можете попробовать.

Если вы уверены, что это хранилище клонировано только вами и вашим коллегой, вы можете переписать удаленный журнал. Для этого сбросьте вашу локальную ветку master при коммите C (с помощью drag&drop, как я говорил ранее) и push ее. SmartGit может запретить вам это делать, перейдите в «Настройки/Команды/Push» и включите параметр «Разрешить изменение принудительных коммитов». Потому что это опасно.

Это перезапишет позицию удаленной ветки master, вытащить из нее с машины вашего коллеги. Если он не внес никаких дополнительных изменений в эту ветку, то все должно быть в порядке.

person Mikhail    schedule 05.09.2015
comment
Потому что это опасно. Это означает, что это может вызвать путаницу, а не то, что это может что-то сломать, верно? - person endolith; 04.12.2015
comment
@endolith Да, это не сломает сам репозиторий GIT, вы не сможете так легко сломать его. - person Mikhail; 04.12.2015
comment
Вы только что заставили меня потерять мои локальные изменения, сказав перетащить зеленую стрелку. Я хотел зафиксировать изменения в другой ветке. - person Ronen Festinger; 03.02.2021

TLDR: вот его скриншотsmatgit screenshot

person David Dehghan    schedule 21.04.2018