Как отменить незафиксированные изменения в SourceTree?


83

Я новичок в среде Git и использую BitBucket с SourceTree на Mac. Все, что я хочу сейчас сделать, это отменить изменения с момента последней фиксации. Как мне это сделать? Я не нашел ничего похожего на «отменить изменения», и прямое извлечение из последней фиксации, похоже, не работает. Решения, реализованные с помощью графического интерфейса или командной строки, будут хорошими.


вы имеете в виду, что хотите отменить последнюю фиксацию? или оставить его и проверить предыдущий коммит, например, по причинам тестирования?
Mohammad AbuShady

1
@MohammadAbuShady Думаю, ответ тоже. С момента последнего коммита я внес некоторые изменения, которые хочу отменить. Я хочу вернуть свой последний коммит.
goldfrapp04

Значит, у вас есть незавершенные изменения, которые вы хотите отменить?
Mohammad AbuShady

Ни один из ответов здесь не помог мне удалить раздражающую запись «Незавершенные изменения» в верхней части моего исходного дерева. И было слишком много неустановленных файлов, чтобы их можно было удалить один за другим. Ответ здесь сработал: stackoverflow.com/questions/14075581/…
PVS

Я запутался в параметрах контекстного меню при щелчке правой кнопкой мыши по пункту в списке Unstaged Files; Discard(Shift + Ctrl + R) и Remove(Ctrl + Del), я думаю Discard, отменит такие изменения, как git reset --hardи Removeудалит файл и произведет это удаление.
The Red Pea

Ответы:


62

Я люблю использовать

git stash

Это сохраняет все незафиксированные изменения в тайнике . Если вы хотите потом просто отменить эти изменения git stash drop(или git stash popвосстановить их).

Хотя это технически не «правильный» способ отменить изменения (как указывали другие ответы и комментарии).

SourceTree : на верхней панели щелкните значок «Stash», введите его имя и создайте. Затем в левом вертикальном меню вы можете «показать» весь тайник и удалить его в контекстном меню. Вероятно, в ST нет другого способа отбросить все файлы сразу.


7
Что git reset --hard HEAD
ж,

4
@cocoanut Я считаю, что мой ответ «неправильный», потому что это злоупотребление stashфункцией. Ответ Мохаммеда - правильный способ отказаться от всех изменений.
Макс

Да, и еще потому, что я не видел, где ярлык.
Роберто

3
Мне нравится этот метод, поскольку он дает вам последний шанс восстановить ваши изменения, если вы передумаете. Я редко reset --hard, но часто прячу свои изменения, чтобы начать все сначала, а потом бросаю тайник, если решу, что он мне не нужен.
Макс

Этот метод не удалял новые неверсированные файлы. В этом случае лучше сработал метод Роберто с использованием сброса и очистки.
Габриэль Дженсен

143

В SourceTree для Mac щелкните правой кнопкой мыши файлы, которые вы хотите удалить (в списке « Файлы» в рабочем дереве ), и выберите « Сброс» .

В SourceTree для Windows щелкните правой кнопкой мыши файлы, которые нужно удалить (в списке изменений рабочей копии ), и выберите « Отменить» .

В git вы просто сделаете:

git reset --hard для отмены изменений, внесенных в файлы с версией;

git clean -xdfдля удаления новых ( неотслеживаемых ) файлов, в том числе проигнорированных ( xопция). dтакже удалить неотслеживаемые каталоги и fпринудительно.


9
Вы также можете щелкнуть правой кнопкой мыши всю «Рабочую копию» на левой панели (или нажать Cmd + Shift + R) ;-)
Geo

14
Удивительно, что одна и та же команда имеет разные имена для Mac и Windows. Как будто графический интерфейс Git (по сравнению с командной строкой) уже недостаточно запутал.
NSTJ

Благодаря! Я думаю, что за этот ответ следует проголосовать как за правильный ;-)
Эрнан Арбер

@NSTJ: Согласен ... это довольно хорошо подрывает уверенность в возможности присвоения единообразного определения таким терминам, как «сброс» и «сброс» в отношении инструментов git. Т.е. определение, с которым можно ожидать широкого согласия.
LarsH

7

На неустановленном файле нажмите на три точки справа. Как только вы щелкнете по нему, появится всплывающее меню, в котором вы сможете Discard file.


2
Это нормально, когда файлов всего несколько, но что происходит, когда файлов много?
Itai Spector

4

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

Чтобы отключить файлы, используйте

git reset HEAD /file/name

И чтобы отменить изменения в файле

git checkout -- /file/name

Если у вас есть пакет файлов внутри папки, вы можете отменить всю папку

git checkout -- /folder/name

Обратите внимание, что все эти команды уже отображаются, когда вы git status

Здесь я создал фиктивное репо и перечислил все 3 возможности

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   test2
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       test3

3

В графическом интерфейсе sourcetree щелкните рабочий каталог, щелкните правой кнопкой мыши файл (ы), которые вы хотите удалить, затем щелкните Discard


2

Сделайте как следует,

  • Нажмите на commit
  • Выберите все, нажав на CMD+Aто, что вы хотитеdelete or discard
  • Right click на выбранных незафиксированных файлах, которые вы хотите удалить
  • Выберите Removeиз выпадающего списка

1

Итак, в исходном дереве Windows это просто, на macOS я тоже некоторое время смотрел ...

Нажмите Command + Shift + R, в то время как в исходном дереве будет показано скрытое всплывающее окно, которое позволит вам удалить отдельные файлы ИЛИ ВСЕ! Почему это скрыто? Мы никогда не узнаем .. но это работает!

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.