Я просто клонировал git-репозиторий и проверил ветку. Я работал над этим, а затем решил удалить все свои локальные изменения, так как я хотел оригинальную копию.
Короче говоря, мне пришлось выполнить следующие две команды, чтобы удалить мои локальные изменения
git checkout .
git clean -f
Мой вопрос
(1) Это правильный подход к избавлению от локальных изменений, или, пожалуйста, дайте мне знать правильный подход.
(2) когда мы используем, git reset --hard
как я могу сбросить даже без этой команды
Спасибо
* Решение: Major Edit (s): 26/26: * Заменены многие расплывчатые термины на специфическую для git терминологию [отслежены / не отслежены / поставлены / не установлены)
При локальных изменениях может быть только три категории файлов:
Тип 1. Staged Tracked файлы
Тип 2. Unstaged Отслеживаемые файлы
Тип 3. Unstaged UnTracked файлы или UnTracked файлы
- Staged - те, которые перемещены в область подготовки / добавлены в указатель
- Отслеженные - измененные файлы
- UnTracked - новые файлы. Всегда неподготовленный Если постановка, это означает, что они отслеживаются.
Что делают каждая команда:
git checkout .
- УДАЛЯЕТ ТОЛЬКО НЕСТАГИРОВАННЫЕ СЛЕДУЮЩИЕ файлы [Тип 2]git clean -f
- УДАЛЯЕТ НЕУСТАНОВЛЕННЫЕ НЕПРАВИЛЬНЫЕ файлы ТОЛЬКО [Тип 3]git reset --hard
- Удаляет ТОЛЬКО Staged Tracked и UnStaged Tracked файлы [Тип 1, Тип 2]git stash -u
- Удаляет все изменения [Тип 1, Тип 2, Тип 3]
Вывод:
Понятно, что мы можем использовать либо
(1) combination of `git clean -f` and `git reset --hard`
ИЛИ
(2) `git stash -u`
достичь желаемого результата.
Примечание: копить, так как слово означает «Хранить (что-то) безопасно и тайно в указанном месте». Это всегда можно получить с помощью git stash pop
. Поэтому выбор между двумя вышеупомянутыми вариантами - это вызов разработчика.
Спасибо Кристоф и Фредерик Шёнинг.
Изменить: 03/27
Я думал, что стоит поставить « остерегаться » запискуgit clean -f
git clean -f
Там нет пути назад. Используйте -n
или --dry-run
для предварительного просмотра ущерба, который вы нанесете.
Если вы хотите также удалить каталоги, запустите git clean -f -d
Если вы просто хотите удалить игнорируемые файлы, запустите git clean -f -X
Если вы хотите удалить как игнорируемые, так и не проигнорированные файлы, запустите git clean -f -x
ссылка: подробнее git clean
: Как удалить локальные (неотслеживаемые) файлы из текущего рабочего дерева Git?
Редактировать: 20.05.15
Отмена всех локальных коммитов в этой ветке [Удаление локальных коммитов]
Чтобы отменить все локальные коммиты в этой ветке, чтобы сделать локальную ветвь идентичной "восходящему" из этой ветки, просто запустите git reset --hard @{u}
Ссылка: http://sethrobertson.github.io/GitFixUm/fixup.html
или сделайте git reset --hard origin/master
[если местный филиал master
]
Примечание: 12.06.2015 Это не дубликат другого SO вопроса, который помечен как дубликат. Этот вопрос посвящен тому, как удалить локальные изменения GIT [удалить добавленный файл, удалить изменения, добавленные в существующий файл и т. Д., А также различные подходы; Где в другом потоке SO только адрес, как удалить локальный коммит. Если вы добавили файл и хотите удалить его в одиночку, то другой поток SO не обсуждает его. Следовательно, это не дубликат другого]
Изменить: 23.06.15
Как восстановить коммит, уже переданный в удаленный репозиторий?
$ git revert ab12cd15
Изменить: 01.09.2015
Удалить предыдущий коммит из локальной ветки и удаленной ветки
Случай: Вы только что внесли изменения в свой локальный филиал и сразу же отправили в удаленный филиал, внезапно осознав: о, нет! Мне не нужно это изменение. Теперь что делать?
git reset --hard HEAD~1
[для удаления этого коммита из локальной ветки]
git push origin HEAD --force
[обе команды должны быть выполнены. Для удаления из удаленной ветки]
Что за ветка? Это проверенная ветка.
Редактировать 09/08/2015 - Удалить локальное слияние мерзавцев :
Я нахожусь на master
ветке и слил master
ветку с вновь работающей веткойphase2
$ git status
# On branch master
$ git merge phase2
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 8 commits.
Q: Как избавиться от этого слияния? Пробовал git reset --hard
и git clean -d -f
оба не работали.
Единственное, что сработало, это одно из следующих:
$ git reset --hard origin/master
или
$ git reset --hard HEAD~8
или
$ git reset --hard 9a88396f51e2a068bb7
[sha commit code - это тот, который присутствовал до того, как произошли все ваши коммиты]
git stash -a
[или --all] также хранит игнорируемые и неотслеживаемые файлы.git clean -x
также будет очищать игнорируемые файлы.git clean -X
будет чистить только проигнорированные файлы.Ответы:
Все зависит от того, что именно вы пытаетесь отменить / отменить. Начните с чтения поста в ссылке Убе . Но чтобы попытаться ответить:
Аппаратный сброс
полностью удалить все поэтапные и неустановленные изменения в отслеживаемых файлах.
Я часто использую жесткий сброс настроек, когда мне нравится «просто отменить все, как если бы я сделал полное повторное клонирование с пульта». В вашем случае, когда вы просто хотите, чтобы ваш репо был чистым, это сработало бы.
чистый
Удалить файлы, которые не отслеживаются.
Для удаления временных файлов, но сохраняйте поэтапные и немаркированные изменения уже отслеженных файлов. В большинстве случаев я бы, вероятно, закончил бы созданием правила игнорирования вместо неоднократной очистки - например, для папок bin / obj в проекте C #, которые вы обычно хотели бы исключить из своего репозитория для экономии места, или что-то в этом роде.
Опция -f (force) также удаляет файлы, которые не отслеживаются и также игнорируются git, хотя ignore-rule. В приведенном выше случае с правилом игнорирования никогда не отслеживать папки bin / obj, даже если git игнорирует эти папки, использование опции force удалит их из вашей файловой системы. Я время от времени видел использование этого, например, при развертывании сценариев, и вы хотите очистить свой код перед его развертыванием, архивированием или чем-то еще.
Git clean не будет трогать файлы, которые уже отслеживаются.
Оформить заказ "точка"
Я на самом деле никогда не видел эту запись, прежде чем читать ваш пост. Мне трудно найти документацию для этого (может быть, кто-то может помочь), но если немного поиграть, это выглядит так:
msgstr "отменить все изменения в моем рабочем дереве".
Т.е. отменить неустановленные изменения в отслеживаемых файлах. По-видимому, он не затрагивает поэтапные изменения и оставляет неотслеживаемыми файлы в покое.
припрятать
В некоторых ответах упоминается скрытие. Как следует из формулировки, вы, вероятно, будете использовать запоминание, когда вы находитесь в середине чего-то (не готового к коммиту), и вам придется временно переключать ветви или каким-то образом работать над другим состоянием вашего кода, чтобы позже вернуться к своему «беспорядку». стол письменный". Я не вижу, что это относится к вашему вопросу, но это определенно удобно.
Подводить итоги
Как правило, если вы уверены, что вы совершили и, возможно, подтолкнули к удаленным важным изменениям, если вы просто играете или что-то подобное, использование с
git reset --hard HEAD
последующимgit clean -f
будет окончательно очистит ваш код до состояния, в котором он был бы, если бы он был клонирован и проверил из ветки. Очень важно подчеркнуть, что сброс также удалит поэтапные, но незафиксированные изменения. Это сотрет все, что не было зафиксировано (кроме неотслеживаемых файлов, в этом случае используйте clean ).Все остальные команды существуют для облегчения более сложных сценариев, где требуется гранулярность «отмены» :)
Я чувствую, ваш вопрос № 1 покрыт, но, наконец, заключаю № 2: причина, по которой вы никогда не находили необходимость использовать,
git reset --hard
заключалась в том, что вы никогда ничего не ставили. Если бы вы устроили изменение, ниgit checkout .
отменилиgit clean -f
бы это.Надеюсь, что это охватывает.
источник
git reset --hard
. Я попробовал это, и да .. те файлы , добавленные в индекс (постановки) были удалены только после того, какgit reset --hard
, и я предполагаю , что по умолчаниюgit reset --hard
являетсяgit reset --hard head
. Эта ссылка также была полезна gitready.com/beginner/2009/01/18/the-staging-area.htmlgit stash -u
что здесь больше всего смысла.git stash -u
делает и как это сделать, но Фредерик дал мне знать, что перезагрузить сложно, используя комбинациюgit reset --hard
иgit clean -f
, и почему нетstash
, предпочтительнее в некоторых сценариях. Теперь, пожалуйста, помогите мне выбрать, какой из них я должен пометить как ответ :), оба мои ответы..
является путевой спецификацией, ссылающейся на текущий рабочий каталог, который может быть корнем хранилища. С git-scm.com:git checkout [<tree-ish>] [--] <pathspec>…
обновляет именованные пути в рабочем дереве из индексного файла или из <tree-ish>.git reset --hard
и другое,git clean -dfx
являются разрушительными . В любом случае, пожалуйста, исправьте строчную буквуhead
в ответе, она должна быть либо заглавной,HEAD
либо вообще отсутствовать.Причина добавления ответа на данный момент:
До сих пор я добавлял заключение и «ответы» к самому моему первоначальному вопросу, делая вопрос очень длинным, и, следовательно, переходя к отдельному ответу.
Я также добавил более часто используемые команды git, которые помогают мне в git, чтобы помочь кому-то еще.
В основном, чтобы очистить все местные коммиты
$ git reset --hard
и$ git clean -d -f
Прежде чем совершать какие-либо коммиты, нужно сначала настроить имя пользователя и адрес электронной почты, которые будут отображаться вместе с вашим коммитом.
# Устанавливает имя, которое вы хотите прикрепить к вашим транзакциям фиксации
# Устанавливает электронное письмо, которое вы хотите прикрепить к вашим транзакциям фиксации
# Перечислите глобальный конфиг
# Перечислите удаленный URL
#Проверь состояние
# Перечислите все локальные и удаленные филиалы
# создайте новую локальную ветку и начните работать над этой веткой
или, это может быть сделано в два этапа
создать ветку:
git branch branchname
работать в этой ветке:git checkout branchname
#commit local changes [двухэтапный процесс: - Добавить файл в индекс, что означает добавление в промежуточную область. Затем зафиксируйте файлы, которые присутствуют в этой промежуточной области.]
# проверить другой местный филиал
# удалить все изменения в локальной ветке [Предположим, вы внесли некоторые изменения в локальную ветку, например добавили новый файл или изменили существующий файл, или сделали локальный коммит, но больше не нуждались в этом]
git clean -d -f
иgit reset --hard
[удалите все локальные изменения, сделанные в локальной ветке, кроме случаев, когда местный коммит]git stash -u
также удаляет все измененияПримечание: Это ясно , что мы можем использовать либо (1) комбинацию
git clean –d –f
иgit reset --hard
OR (2)git stash -u
для достижения желаемого результата.Примечание 1: Скрытие, поскольку слово означает «Хранить (что-то) безопасно и тайно в указанном месте». Это всегда можно получить с помощью git stash pop. Поэтому выбор между двумя вышеупомянутыми вариантами - это вызов разработчика.
Примечание 2:
git reset --hard
удалит изменения рабочего каталога. Обязательно сохраните все локальные изменения, которые вы хотите сохранить, перед запуском этой команды.# Переключитесь на главную ветку и убедитесь, что вы в курсе.
git fetch
[это может быть необходимо (в зависимости от вашего git config), чтобы получать обновления на origin / master]# Объединить ветку объектов в главную ветку.
# Сбросьте основную ветвь в исходное состояние.
# Случайно удалил файл из локального, как вернуть его обратно? Сделайте,
git status
чтобы получить полный путь к файлу удаленного ресурсаэто оно!
#Merge мастер ветка с someotherbranch
# переименовать местное отделение
# удалить местное отделение
# удалить удаленную ветку
или
# вернуть коммит, уже переданный в удаленный репозиторий
# ответвление от предыдущего коммита с использованием GIT
# Изменить сообщение о коммите самого последнего коммита, который уже был передан на удаленный
# Отмена всех локальных коммитов в этой ветке [Удаление локальных коммитов]
Чтобы отменить все локальные коммиты в этой ветке, чтобы сделать локальную ветвь идентичной "восходящему" из этой ветки, просто запустите
Ссылка: http://sethrobertson.github.io/GitFixUm/fixup.html или сделайте
git reset --hard origin/master
[если локальная ветвь является главной]# Вернуть коммит, уже переданный в удаленный репозиторий?
# Удалить предыдущий коммит из локальной ветки и удаленной ветки
Сценарий использования: вы просто передали изменения в свой локальный филиал и сразу же отправили в удаленный филиал, внезапно осознав: о нет! Мне не нужно это изменение. Теперь что делать?
git reset --hard HEAD~1
[для удаления этого коммита из локальной ветки. 1 обозначает ОДИН коммит, который вы сделали]git push origin HEAD --force
[обе команды должны быть выполнены. Для удаления из удаленной ветки. В настоящее время извлеченная ветвь будет называться веткой, в которой вы выполняете эту операцию.# Удалите некоторые недавние коммиты из локального и удаленного репо и сохраните коммит, который вы хотите. (своего рода возврат коммитов с локального и удаленного)
Предположим, у вас есть 3 коммита, которые вы отправили в удаленную ветку с именем '
develop
'Вернуться к старому коммиту (изменить состояние ветки)
git log --oneline --decorate --graph
// чтобы увидеть все ваши комидидыgit clean -d -f
// убираем любые локальные измененияgit reset --hard commitid-1
// локально возвращаемся к этому коммитуgit push -u origin +develop
// перевести это состояние в удаленное состояние. + сделать принудительный толчок# Удалить локальное git merge: Case: Я нахожусь в главной ветке и слил главную ветку с недавно работающей ветвью phase2
На ветке мастер
$ git merge phase2
$ git status
На ветке мастер
Ваша ветка опережает 'origin / master' на 8 коммитов.
Q: Как избавиться от этого локального git merge? Пробовал
git reset --hard
иgit clean -d -f
оба не работали. Единственное, что сработало, это одно из следующих:$ git reset --hard origin / master
или
$ git reset --hard HEAD ~ 8
или
$ git reset --hard 9a88396f51e2a068bb7
[sha commit code - это тот, который присутствовал до того, как произошли все ваши коммиты]#create gitignore file
touch .gitignore
// создаем файл в mac или unix пользователяхПример содержимого .gitignore:
Ссылка на шпаргалку GIT: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf
источник
git push origin :branch-name
однако я рекомендую использоватьgit push origin --delete branchname
Как и все в git, есть несколько способов сделать это. Две команды, которые вы использовали, являются одним из способов сделать это. Еще одна вещь, которую вы могли бы сделать - просто спрятать их
git stash -u
. Он-u
гарантирует, что вновь добавленные файлы (без отслеживания) также включены.Удобная вещь о
git stash -u
том, чтоgit stash pop
(это похоже на удаление электронного письма в gmail, где вы можете просто отменить, если потом передумаете)На ваш другой вопрос
git reset --hard
не будут удалены неотслеживаемые файлы, так что вам все равно понадобитсяgit clean -f
. Ноgit stash -u
может быть самым удобным.источник
git reset --hard
не будет удалять неотслеживаемые файлы на самом деле, но это будет удалить неотслеживаемые изменения, то есть изменения в файлы, которые уже находятся в индексе. Я уверен, что это то, что вы имели в виду :)git stash -u
, я увидел этот ответ от git bash. «Сохраненный рабочий каталог и состояние индекса WIP на {branchname}. Может быть, этот сохраненный файл - то, что мы могли бы извлечь с помощьюgit stash pop
.git stash -u
делает и как это сделать, но Фредерик дал мне знать, что перезагрузить сложно, используя комбинациюgit reset --hard
иgit clean -f
, и почему нетstash
, предпочтительнее в некоторых сценариях. Теперь, пожалуйста, помогите мне выбрать, какой из них я должен пометить как ответ :), оба мои ответы.1. Когда вы вообще не хотите сохранять свои локальные изменения.
Эта команда полностью удалит все локальные изменения из вашего локального репозитория. Это лучший способ избежать конфликтов во время команды pull, только если вы вообще не хотите сохранять свои локальные изменения.
2. Когда вы хотите сохранить свои локальные изменения
Если вы хотите получить новые изменения с удаленного компьютера и игнорировать локальные изменения во время этого запроса,
Это будет хранить все локальные изменения, теперь вы можете вытащить удаленные изменения,
Теперь вы можете вернуть свои локальные изменения,
источник
git reset --hard
не удаляет все локальные изменения. Это только удаляет модификации. Если вы хотите удалить добавления, то вы также должныgit clean -fd
Использование:
Отменить изменения в рабочем каталоге.
источник
Я думаю, что у git есть одна вещь, которая не совсем задокументирована. Я думаю, что это на самом деле пренебрегли.
git checkout .
Чувак, ты спас мой день. У меня всегда есть вещи, которые я хочу попробовать, используя модифицированный код. Но иногда вещи портят модифицированный код, добавляют новые неотслеживаемые файлы и т. Д. Итак, я хочу сделать то, что я хочу, сделать беспорядок, затем быстро очистить и зафиксировать, если я счастлив.
Там в
git clean -fd
хорошо работает для неотслеживаемых файлов.Затем
git reset
просто удаляет постановку, ноgit checkout
это слишком громоздко. Указывать файл по одному или использовать каталоги не всегда идеально. Иногда измененные файлы, от которых я хочу избавиться, находятся в каталогах, которые я хочу сохранить. Я пожелал этой единственной команды, которая просто удаляет необработанные изменения, и вот вы здесь. Спасибо.Но я думаю, что они должны просто иметь
git checkout
без каких-либо опций, удалить все неустановленные изменения и не трогать поставленные. Это своего рода модульный и интуитивно понятный. Больше похоже на то, чтоgit reset
делает.git clean
Также следует сделать то же самое.источник
Лучший способ проверить изменения.
Изменяя файл pom.xml в проекте с именем project-name, вы можете сделать это:
источник
Для сброса всего, что мне нравится, чтобы спрятать эту шкатулку, это самый быстрый способ отменить все, особенно если вы работаете между несколькими репо.
Это сохранит все изменения в
{0}
ключе и мгновенно отбросит его из{0}
git stash && git stash drop
источник
Прежде всего, проверьте, сохранены или нет важные изменения:
чем попробовать
но если вам нужно просто отменить:
Читать дальше >> https://git-scm.com/docs/git-reset
источник