Различные способы удаления локальных изменений Git



я просто клонировал репозиторий git и проверил ветку. Я работал над этим, а затем решил удалить все мои локальные изменения, так как я хотел оригинальную копию.



короче говоря, я должен был сделать следующие две команды, чтобы удалить мои локальные изменения



git checkout .

git clean -f


мой вопрос:



(1) это правильный подход в избавлении от локальных изменений, или иначе, пожалуйста, дайте мне знать правильный подход.



(2) Когда мы используем git reset --hard как я могу сбросить даже без этой команды



спасибо



*решение: основные изменения: 03/26:*
Заменил многие расплывчатые термины специальной терминологией git
[отслежено / не отслежено / поставлено / неустановлено]



там может быть только три категории файлы, когда мы делаем изменения:




Тип 1. Поэтапные отслеживаемые файлы



Тип 2. Неустановленные отслеживаемые файлы



Тип 3. Неотслеживаемые файлы проиндексированы на.к.а неотслеживаемые файлы





  • Staged - те, которые перемещаются в промежуточную область / добавляются в индекс

  • отслеживаемые-измененные файлы

  • UnTracked-новые файлы. Всегда проиндексированы. Если они поставлены, это означает, что они отслеживаются.


что каждая команда делает:




  1. git checkout . - удаляет отслеживаемые файлы проиндексированы только [тип 2]


  2. git clean -f - Удаляет только неустановленные файлы без отслеживания [Тип 3]


  3. git reset --hard - удаляет только поэтапные отслеживаемые и Нестагированные отслеживаемые файлы[Тип 1, Тип 2]


  4. 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 - это тот, который присутствовал до того, как все ваши коммиты слияния произошли]

2591   9  

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 Это

  1. это, наверное, самый простой (только?) одна команда для достижения своей цели
  2. если вы передумаете после этого вы получите все ваши работы с 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 checkout -- <file>

чтобы отменить изменения в рабочем каталоге.

Я думаю, что у 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

    Ничего не найдено.