Вопрос: Сбросить ветвь локального репозитория так же, как удаленный репозиторий HEAD


Как сбросить мою локальную ветку так же, как ветвь в удаленном репозитории?

Я сделал:

git reset --hard HEAD

Но когда я запускаю git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

Не могли бы вы рассказать мне, почему у меня эти «измененные»? Я не касался этих файлов? Если я это сделал, я хочу удалить их.


2416


источник


Ответы:


Установка ветви точно в соответствии с удаленной ветвью может быть выполнена в два этапа:

git fetch origin
git reset --hard origin/master

Если вы хотите сохранить состояние текущего филиала, прежде чем делать это (на всякий случай), вы можете сделать следующее:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

Теперь ваша работа будет сохранена на ветке «my-saved-work», если вы решите, что хотите ее вернуть (или хотите посмотреть на нее позже или разделить ее с обновленной ветвью).

Обратите внимание, что в первом примере предполагается, что имя удаленного репо является «источником» и что ветвь с именем «master» в удаленном репо совпадает с текущим отмеченным ветвью в вашем локальном репо.

Кстати, эта ситуация, в которой вы находитесь, выглядит очень странно, как обычный случай, когда в текущую проверочную ветку небедного репозитория делается толкание. Вы недавно натолкнулись на свое местное репо? Если нет, то не беспокойтесь - что-то еще должно было заставить эти файлы неожиданно в конечном итоге изменить. В противном случае вы должны знать, что не рекомендуется вставлять в не-голый репозиторий (а не в текущую отмеченную ветку, в частности).


4308



Мне нужно было сделать (решение в принятом ответе):

git fetch origin
git reset --hard origin/master

С последующим:

git clean -f

для удаления локальных файлов

Чтобы увидеть, какие файлы будут удалены (без их удаления):

git clean -n -f

239



Сначала переустановите предыдущий выбор HEADсоответствующей восходящей ветви:

git reset --hard @{u}

Преимущество указания @{u}или его подробный вид @{upstream}что имя удаленного репо и ветви не обязательно должно быть явно указано.

Затем, при необходимости, удалите необработанные файлы, необязательно также с -x:

git clean -df

Наконец, при необходимости получите последние изменения:

git pull

112



git reset --hard HEADфактически только сбрасывается до последнего зафиксированного состояния. В этом случае HEAD ссылается на HEAD вашего филиала.

Если у вас несколько коммитов, это не сработает.

То, что вы, вероятно, захотите сделать, сбрасывается в голову источника или что-то, что вы называете удаленным репозиторием. Я бы просто сделал что-то вроде

git reset --hard origin/HEAD

Будьте осторожны. Жесткие списания не могут быть легко отменены. Лучше делать то, что предлагает Дэн, и отбрасывать копию ваших изменений перед сбросом.


88



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

Чтобы получить моральный эквивалент стирание каталога проекта и повторное клонирование с пульта:

git fetch
git reset --hard
git clean -x -d -f

Предупреждение : git clean -x -d -fявляется необратимый и вы можете потерять файлы и данные (например, вещи, которые вы проигнорировали, используя .gitignore).


54



Вопрос включает в себя два вопроса:

  1. как сбросить локальную ветвь до точки, где удаленный
  2. как очистить вашу промежуточную область (и, возможно, рабочий каталог), чтобы git statusговорит nothing to commit, working directory clean.

Единый ответ:

  1. git fetch --prune (необязательно) Обновляет локальный снимок удаленного репо. Дальнейшие команды являются только локальными.
    git reset --hard @{upstream}Помещает указатель локальной ветви, где находится моментальный снимок удаленного, а также задает индекс и рабочий каталог файлам этого коммита.
  2. git clean -d --force Удаляет неподготовленные файлы и каталоги, которые мешают git сказать «рабочий каталог чистым».

28



This is something I face regularly, & I've generalised the script Wolfgang provided above to work with any branch

I also added an "are you sure" prompt, & some feedback output

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

20



Here is a script that automates what the most popular answer suggests ... See https://stackoverflow.com/a/13308579/1497139 for an improved version that supports branches

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see https://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

11



Provided that the remote repository is origin, and that you're interested in branch_name:

git fetch origin
git reset --hard origin/<branch_name>

Also, you go for reset the current branch of origin to HEAD.

git fetch origin
git reset --hard origin/HEAD

How it works:

git fetch origin downloads the latest from remote without trying to merge or rebase anything.

Then the git reset resets the <branch_name> branch to what you just fetched. The --hard option changes all the files in your working tree to match the files in origin/branch_name.


11



I did:

git branch -D master
git checkout master

to totally reset branch


note, you should checkout to another branch to be able to delete required branch


10



If you had a problem as me, that you have already committed some changes, but now, for any reason you want to get rid of it, the quickest way is to use git reset like this:

git reset --hard HEAD~2

I had 2 not needed commits, hence the number 2. You can change it to your own number of commits to reset.

So answering your question - if you're 5 commits ahead of remote repository HEAD, you should run this command:

git reset --hard HEAD~5

Notice that you will lose the changes you've made, so be careful!


7



If you want to go back to the HEAD state for both the working directory and the index, then you should git reset --hard HEAD, rather than to HEAD^. (This may have been a typo, just like the single versus double dash for --hard.)

As for your specific question as to why those files appear in the status as modified, it looks like perhaps you did a soft reset instead of a hard reset. This will cause the files that were changed in the HEAD commit to appear as if they were staged, which is likely what you are seeing here.


5