Различные способы удаления локальных изменений Git
я просто клонировал репозиторий git и проверил ветку. Я работал над этим, а затем решил удалить все мои локальные изменения, так как я хотел оригинальную копию.
короче говоря, я должен был сделать следующие две команды, чтобы удалить мои локальные изменения
git checkout .
git clean -f
мой вопрос:
(1) это правильный подход в избавлении от локальных изменений, или иначе, пожалуйста, дайте мне знать правильный подход.
(2) Когда мы используем git reset --hard как я могу сбросить даже без этой команды
спасибо
*решение: основные изменения: 03/26:*
Заменил многие расплывчатые термины специальной терминологией git
[отслежено / не отслежено / поставлено / неустановлено]
там может быть только три категории файлы, когда мы делаем изменения:
Тип 1. Поэтапные отслеживаемые файлы
Тип 2. Неустановленные отслеживаемые файлы
Тип 3. Неотслеживаемые файлы проиндексированы на.к.а неотслеживаемые файлы
- Staged - те, которые перемещаются в промежуточную область / добавляются в индекс
- отслеживаемые-измененные файлы
- UnTracked-новые файлы. Всегда проиндексированы. Если они поставлены, это означает, что они отслеживаются.
что каждая команда делает:
git checkout .- удаляет отслеживаемые файлы проиндексированы только [тип 2]git clean -f- Удаляет только неустановленные файлы без отслеживания [Тип 3]git reset --hard- удаляет только поэтапные отслеживаемые и Нестагированные отслеживаемые файлы[Тип 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.
Поэтому выбор между указанными выше двумя вариантами является вызовом разработчика.
спасибо Кристоф и Фредерик Шенинг.
Edit: 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?
изменить: 05/20/15
отбрасывание всех локальных коммитов на этой ветке [удаление локальных коммитов]
чтобы отбросить все локальные коммиты на этой ветке, чтобы сделать локальную ветку идентичной
чтобы "вверх по течению" этой ветви, просто запустите git reset --hard @{u}
ссылка:http://sethrobertson.github.io/GitFixUm/fixup.html
или git reset --hard origin/master [если местный филиал master]
Примечание.: 06/12/2015
Это не дубликат другого вопроса SO, который помечен как дубликат. Этот вопрос касается того, как удалить локальные изменения GIT [удалить добавленный файл, удалить изменения, добавленные в существующий файл и т. д., и различные подходы; где в другом потоке SO только адрес, как удалить локальную фиксацию. Если вы добавили файл, и вы хотите удалить его в одиночку, то другой поток SO не обсуждает его. Следовательно, это не дубликат другого один]
Edit: 06/23/15
как вернуть фиксацию, уже отправленную в удаленный репозиторий?
$ git revert ab12cd15
Edit: 09/01/2015
удалить предыдущую фиксацию из локальной ветви и удаленной ветви
Case: вы просто внесли изменения в свою локальную ветку и сразу же перешли к удаленной ветке,
Вдруг понял , О нет! Мне не нужны эти изменения. И что теперь делать?
git reset --hard HEAD~1 [для удаления этой фиксации из локальной ветви]
git push origin HEAD --force [обе команды должны быть выполнены. Для удаления из удаленной ветки]
что за ветка ? Его в настоящее время проверил филиал.
изменить 09/08/2015 - удалить локальный git слияние:
я 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 - это тот, который присутствовал до того, как все ваши коммиты слияния произошли]
9 ответов:
все зависит от того, что именно вы пытаетесь отменить/вернуть. Начните с чтения сообщение в ссылке Убе. Но попытаться ответить:
перезагрузка
git reset --hard [HEAD]удалить все индексированных и неиндексированных изменений отслеживаемых файлов.
Я часто использую жесткий сброс, когда мне нравится "просто отменить все, как если бы я сделал полный повторный клон с пульта дистанционного управления". В вашем случае, где вы просто хочу, чтобы ваше РЕПО было чистым, это сработает.
очистить
git clean [-f]удалить файлы, которые не отслеживаются.
для удаления временных файлов, но сохранить индексированных и неиндексированных изменений уже отслеживаемых файлов. В большинстве случаев я бы, вероятно, сделал правило игнорирования вместо многократной очистки-например, для папок bin/obj в проекте C#, которые вы обычно хотите исключить из своего репо, чтобы сэкономить место, или что-то вроде того.
опция-F (force) также удалит файлы, которые не отслеживаются и кроме того, игнорируемые git, хотя игнорировать правила. В приведенном выше случае с правилом ignore-rule никогда не отслеживать папки bin/obj, даже если эти папки игнорируются git, используя параметр force, вы удалите их из своей файловой системы. Я спорадически видел использование для этого, например, при развертывании сценариев, и вы хотите очистить свой код перед развертыванием, сжимая или еще что-нибудь.
git clean не будет касаться файлов, которые уже отслеживаются.
оформить заказ "точка"
git checkout .Я на самом деле никогда не видел эту нотацию, прежде чем читать ваш пост. Мне трудно найти документацию для этого (возможно, кто-то может помочь), но от игры вокруг немного, похоже, это означает:
"отменить все изменения в моем рабочем дереве".
т. е. отменить неустановленные изменения в отслеживаемые файлы. Он, по-видимому, не касается поэтапных изменений и оставляет необработанные файлы в покое.
хранит
в некоторых ответах упоминается тайник. Как следует из формулировки, вы, вероятно, будете использовать stashing, когда вы находитесь в середине чего-то (не готовы к фиксации), и вам нужно временно переключить ветви или как-то работать над другим состоянием вашего кода, чтобы позже вернуться к своему "грязному столу". Я не вижу, что это относится к вашему вопросу, но это определенно удобно.
подведем итоги
как правило, если вы уверены, что вы совершили и, возможно, подтолкнули к удаленным важным изменениям, если вы просто играете или тому подобное, используя
git reset --hard HEADследовал поgit clean -fокончательно очистит ваш код до состояния, в котором он был бы, если бы он был просто клонирован и извлечен из ветки. Очень важно подчеркнуть, что сброс также удалит поэтапные, но незафиксированные изменения. это сотрет все, что не было совершено (кроме неотслеживаемых файлов, в этом случае, используйте очистить).все остальные команды существуют для облегчения более сложных сценариев, где требуется детализация "отмены материала":)
Я чувствую, что ваш вопрос № 1 покрыт, но, наконец, чтобы сделать вывод о № 2: причина, по которой вы никогда не находили необходимость использовать
git reset --hardбыло то, что вы никогда ничего не ставили. Если бы вы устроили перемены, ниgit checkout .ниgit clean -fвернул бы это.надеюсь, что это покрывает.
как и все в Git есть несколько способов сделать это. Две команды, которые вы использовали, являются одним из способов сделать это. Еще одна вещь, которую вы могли бы сделать, это просто спрятать их с
git stash -u. Элемент-uубедитесь, что новые добавленные файлы (без отслеживания) также включены.удобная вещь о
git stash -uЭто
- это, наверное, самый простой (только?) одна команда для достижения своей цели
- если вы передумаете после этого вы получите все ваши работы с
git stash pop(это как удалять почту в Gmail, где вы можете просто отменить, если вы передумали позже)Что касается вашего другого вопроса
git reset --hardне будет удалять неотслеженные файлы, так что вам все равно понадобитсяgit clean -f. Ноgit stash -uможет быть наиболее удобным.
причина для добавления ответа в данный момент:
до сих пор я добавлял заключение и "ответы" к самому моему первоначальному вопросу, делая вопрос очень длинным, следовательно, переходя к отдельному ответу.
я также добавил больше часто используемые команды git это помогает мне на git, чтобы помочь кому-то еще тоже.
первый шаг, прежде чем делать какие-либо коммиты, чтобы настроить имя пользователя и адрес электронной почты, что появляется вместе с вашим коммитом.
#задает имя, которое вы хотите прикрепить к вашим транзакциям фиксации
$ git config --global user.name "[name]"#устанавливает адрес электронной почты, который вы хотите привязать к вашим транзакциям фиксации
$ git config --global user.email "[email address]"#список глобальной конфигурации
$ git config --list#проверка статуса
git status#Список всех локальных и удаленных филиалов
git branch -a#создать новый локальный филиал и начать работать на этой ветке
git checkout -b "branchname"или, это может быть сделано в два этапа
создать ветку:
git branch branchnameработа над этой веткой:git checkout branchname#совершают локальные изменения [двухэтапный процесс: - Добавить файл в индекс, что означает добавление в промежуточную область. Затем зафиксируйте файлы, которые присутствуют в этой промежуточной области]
git add <path to file> git commit -m "commit message"#checkout некоторые другие местные ветка
git checkout "local branch name"#удалить все изменения в местное отделение [Предположим, вы внесли некоторые изменения в локальную ветвь, такие как добавление нового файла или изменение существующего файла, или создание локальной фиксации, но больше не нужно этого]
git clean -d -fиgit reset --hard[очистить все локальные изменения, внесенные в локальную ветвь, за исключением локальной фиксации]
git stash -uтакже удаляет все измененияПримечание: Ясно, что мы можем использовать либо (1) комбинация
git clean –d –fиgit reset --hardИЛИ (2)git stash -uдля достижения желаемого результата.Примечание 1: тайник, так как слово означает " хранить (что-то) безопасно и тайно в указанном месте.- Это всегда можно восстановить с помощью git stash pop. Поэтому выбор между указанными выше двумя вариантами является вызовом разработчика.
примечание 2:
git reset --hardудалит изменения рабочего каталога. Перед выполнением этой команды обязательно сохраните все локальные изменения, которые вы хотите сохранить.# переключатель в главную ветвь и убедитесь, что вы не в курсе.
git checkout master
git fetch[это может быть необходимо (в зависимости от конфигурации git) для получения обновлений на origin / master ]git pull# слить ветку в ветку master.
git merge feature_branch# сброс главной ветви в исходное состояние.
git reset origin/master#случайно удалил файл из локального, как его восстановить назад? Сделай
git statusчтобы получить полный путь к файлу удаленных ресурсовgit checkout branchname <file path name>вот именно!
#объединить главную ветвь с какой-то другой ветвью
git checkout master git merge someotherbranchname#переименовать местного отделения
git branch -m old-branch-name new-branch-name#удалить локальную ветку
git branch -D branch-name#удалить удаленную ветку
git push origin --delete branchnameили
git push origin :branch-name#revert a фиксация уже перенесена в удаленный репозиторий
git revert hgytyz4567#ответвление от предыдущей фиксации с помощью GIT
git branch branchname <sha1-of-commit>#изменить сообщение фиксации самого последнего фиксации, который уже был отправлен на удаленный
git commit --amend -m "new commit message" git push --force origin <branch-name># отбрасывание всех локальных коммитов на этой ветке[удаление локальных коммитов]
чтобы отбросить все локальные коммиты на этой ветке, чтобы сделать локальная ветвь идентична "вверх по течению" этой ветви, просто запустите
git reset --hard @{u}ссылка:http://sethrobertson.github.io/GitFixUm/fixup.html или сделать
git reset --hard origin/master[если локальная ветвь является главной]# отменить фиксацию, уже переданную в удаленный репозиторий?
$ git revert ab12cd15#удалить предыдущую фиксацию из локальной ветви и удаленной ветви
Use-Case: вы только что совершили переходите в свою локальную ветку и сразу же нажимаете на удаленную ветку, вдруг поняли, о нет! Мне не нужны эти изменения. И что теперь делать?
git reset --hard HEAD~1[для удаления этой фиксации из локальной ветви. 1 обозначает тот коммит, который вы сделали]
git push origin HEAD --force[обе команды должны быть выполнены. Для удаления из удаленной ветки]. В настоящее время извлеченная ветвь будет называться ветвью, в которой вы выполняете эту операцию.#удалить некоторые из последних фиксация из локального и удаленного РЕПО и сохранение до фиксации, которую вы хотите. (своего рода возврат коммитов из локального и удаленного)
предположим, у вас есть 3 коммита, которые вы нажали на удаленную ветку с именем '
develop'commitid-1 done at 9am commitid-2 done at 10am commitid-3 done at 11am. // latest commit. HEAD is current here.вернуться к старой фиксации (чтобы изменить состояние ветви)
git log --oneline --decorate --graph//, чтобы увидеть все ваши commitids
git clean -d -f// очистить все локальные изменения
git reset --hard commitid-1// локально возвращаясь к этому commitid
git push -u origin +develop// Нажмите это состояние на пульт. + делать силу толчка# удалить локальное слияние git: Случай: Я нахожусь на главной ветви и объединил главную ветвь с новой рабочей ветвью phase2
$ git statusна ветке мастер
$ git merge phase2$ git statusна ветке мастер
ваша ветвь опережает "origin / master" по 8 совершает.
Q:Как избавиться от этого локального слияния git? пробовал
git reset --hardиgit clean -d -fоба не сработали. Единственное, что работала являются ли какие-либо из приведенных ниже:$ git reset --hard origin / master
или
$ git reset --hard HEAD~8
или
$ git reset --hard 9a88396f51e2a068bb7[sha commit code - это тот, который присутствовал до всех ваших коммитов слияния случилось]#создать файл gitignore
touch .gitignore// создать файл в Mac или unix пользователейобразец .содержание пример:
.project *.py .settingsссылка на шпаргалку GIT: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf
1. Когда вы вообще не хотите сохранять свои локальные изменения.
git reset --hardэта команда полностью удалит все локальные изменения из локального репозитория. Это лучший способ избежать конфликтов во время команды pull, только если вы не хотите сохранять свои локальные изменения вообще.
2. Если вы хотите сохранить свои локальные изменения
если вы хотите, чтобы вытащить изменения из удаленного и хотите игнорировать локальные изменения во время этой тяги тогда,
git stashон будет прятать все локальные изменения, теперь вы можете вытащить удаленные изменения,
git pullтеперь, вы можете вернуть свои местные изменения,
git stash pop
Я думаю, что у git есть одна вещь, которая четко не документирована. Я думаю, что на самом деле им пренебрегли.
git checkout .Чувак, ты спас мне жизнь. У меня всегда есть вещи, которые я хочу попробовать с помощью измененного кода. Но вещи иногда в конечном итоге портят измененный код, добавляют новые неотслеженные файлы и т. д. Итак, что я хочу сделать, это поставить то, что я хочу, сделать грязные вещи, а затем быстро очистить и совершить, если я счастлив.
здесь
git clean -fdхорошо работает для игнорируемых файлов.затем
git resetпросто удаляет устроили, ноgit checkout- это слишком громоздко. Указание файла по одному или использование каталогов не всегда идеально. Иногда измененные файлы, от которых я хочу избавиться, находятся в каталогах, которые я хочу сохранить. Я хотел, чтобы эта команда просто удаляла нестагированные изменения, и вот вы здесь. Спасибо.но я думаю, что они должны просто
git checkoutбез каких-либо вариантов, удалить все неиндексированных изменений и не трогать устроили. Это своего рода модульный и интуитивно понятный. Больше похоже на то, чтоgit resetделает.git cleanдолжны также сделать то же самое.
лучший способ проверить изменения.
изменение файла pom.xml в проекте с именем project-name вы можете сделать это:
git status # modified: project-name/pom.xml git checkout project-name/pom.xml git checkout master # Checking out files: 100% (491/491), done. # Branch master set up to track remote branch master from origin. # Switched to a new branch 'master'
на удалить все мне нравится прятать и отбрасывать этот тайник, это самый быстрый способ отбросить все, особенно если вы работаете между несколькими РЕПО.
Это будет прятать все изменения в
{0}ключ и мгновенно отбросить его от{0}
git stash && git stash drop
прежде всего проверьте, сохранено ли ваше важное изменение или нет:
$ git status
чем попробуй
$ git reset --hard
он сбросит вашу ветку по умолчанию
но если вам нужно просто отменить:
$ edit (1) $ Git в нем могут содержаться материалы только добавить.с филфр.c $ mailx (2) $ git reset
(3) $ git pull git://info.example.com/ nitfol
Подробнее>>https://git-scm.com/docs/git-reset
Comments