2016-05-02 2 views
0

Я пытаюсь придумать последовательность команд git, которая изменится на известную ветвь внутри ранее существовавшего git-репо. 3 вещи, которые я знаю, являются:Как получить обновленную ветку для репликации git?

  • Я уже внутри папки, содержащей .git папку
  • филиал Я хочу проверки существует на origin
  • Я хочу, чтобы отменить любые временные (постановка или unstaged) изменения, внесенные внутри этой папки.

Это то, что я делаю:

git clean -xfd 
git reset HEAD --hard 
git add --all; git stash; git stash drop 
git fetch origin 
git checkout -B $BRANCH 
git pull origin $BRANCH 

ли это минимальный набор мерзавца команд для достижения этой цели? Есть ли ситуации, когда эта последовательность команд не будет выполнена?

ответ

0

Вы можете сделать это проще:

git fetch --all --prune 
git pull origin <branch> 

Если вы делаете git reset --hard нет необходимости в git stash, так как рабочий каталог будет очищен

git reset HEAD --hard 

get reset --hard
Сбрасывает индекс и рабочее дерево.
Любые изменения в отслеживаемых файлах рабочего дерева с тех пор отбрасываются.


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

Нет необходимости делать делать, так как все, не совершенные вещи не будут добавлены к вашей отрасли, если вы не добавите его в явном виде

Все еще, если вы хотите очистить текущий рабочий каталог

# small x 
git clean -xfd 

# capital x 
git clean -Xfd 

-x

Не используйте стандартные правила игнорирования, считанные с .gitignore (для каждого каталога) и $ GIT_DIR/info/exclude, но все равно используйте правила игнорирования, заданные с параметрами -e. Это позволяет удалить все необработанные файлы, включая сборку продуктов. Это можно использовать (возможно, в сочетании с сбросом git), чтобы создать нетронутый рабочий каталог для проверки чистой сборки.

-X
Удалить только файлы игнорируются Git.
Это может быть полезно восстановить все с нуля, но сохранить созданные вручную файлы.

1

Итак, идея заключается в том, что ваша текущая проверка может быть в полностью мусорном, потенциально опасном состоянии, и вы хотите полностью отказаться от нее?

git fetch 
git checkout -f -B branch origin/branch 
git clean -dfx 

- это то, что вы хотите, если у вас нет подмодулей. Если да, то ядерный вариант

git read-tree --empty 
git clean -dffx   # <-- two f's, forces submodule removal 
git fetch 
git checkout -B branch origin/branch 
git submodule update --init  

(редактирование: переключился с -exec найти гт читать дерево/чистый)


Не используйте git pull для этого, что делает выборку и затем объединяет вытащенную историю в вашу текущую проверку. Выполнение git checkout -B branch сначала просто маркирует вашу текущую проверку branch, поэтому результат этого и тянуть очень далек от перехода на ветвь начала.

Смежные вопросы