git stash применить определенный индекс - PullRequest
0 голосов
/ 18 декабря 2018

Я разветвлялся и клонировал из апстрима https://github.com/F5Networks/k8s-bigip-ctlr, произвел некоторые локальные изменения в моей ветке разработки 'vli-dev', во время этого процесса апстрим внес некоторые изменения, поэтому я спрятал свои локальные изменения, перебазировал мою локальную разработкуветка 'vli-dev' в основной ветке upstream, теперь я хочу, чтобы git stash поочередно применял мои локальные изменения к перебазированной ветке разработки, но возникает следующая проблема:

$ git stash list
stash@{0}: WIP on vli-dev: 3ef5efd ConfigMap serverssl support with 
f5ServerSslProfileAnnotation
stash@{1}: WIP on vli-dev: 1408dc3 Enable configmap to add custom irule
stash@{2}: WIP on vli-dev: bd6d985 Allow user to attach custom irule to Ingress
stash@{3}: WIP on vli-dev: 2452696 Allow ingress to attach X-Forwarded-For iRule
stash@{4}: WIP on vli-dev: cd01ce5 Route health monitor always default from http monitor regardless what's configured in route health monitor annotation, this patch fix it

$ git stash apply 0
error: Your local changes to the following files would be overwritten by merge:
pkg/appmanager/resourceConfig.go
schemas/bigip-virtual-server_v0.1.7.json
Please commit your changes or stash them before you merge.
Aborting

Я заметил локальные измененияна самом деле это изменения, спрятанные в "stash @ {1}"

, появляется, когда я выполняю git stash применить индекс 0, изменения в индексе 1 применяются к файлам, изменяемым индексом 1, изменения индекса 0 неприменяется, как я могу решить это?Мое намерение состоит в том, чтобы применять спрятанный индекс один за другим для разрешения любых конфликтующих изменений с восходящим потоком и запросом на создание pull для восходящего потока.

1 Ответ

0 голосов
/ 18 декабря 2018

Похоже, что вы используете тайники, чтобы попытаться сделать то, что делает rebase, вместо того, чтобы просто делать это.Единственная реальная цель stash - отложить незафиксированные изменения, чтобы они не мешали какой-либо немедленной операции, которую вы хотите выполнить.Как только изменения зафиксированы, нет причин их скрывать - и на самом деле то, что вы пытаетесь сделать с тайниками, - это именно то, для чего был разработан rebase.

Теперь я предполагаю, что выв настоящее время нет никаких незафиксированных изменений, которые вы хотите сохранить.Вы можете использовать git status, чтобы подтвердить, какие незафиксированные изменения, если таковые имеются, у вас есть.Как только ваше рабочее дерево станет чистым, я сделаю следующее:

(1) Перемотайте вашу локальную ветку до ее состояния, прежде чем вы начнете копить вещи.Вы можете использовать reflog для этого

git reflog vli-dev

, и это покажет вам все коммиты, на которые ссылается vli-dev.Найдите последний локальный коммит, который вы сделали.У него будет имя вроде vli-dev@{14}.(Число в фигурных скобках будет указывать, сколько изменений назад, поэтому 14 является лишь примером.) Затем вы бы

git checkout vli-dev
git reset --hard vli-dev@{14}

вернули вашу локальную ветвь в это состояние, восстановив все изменения, которые вы спрятали,Это также отменяет перебазирование, поэтому в следующий раз вам нужно

git rebase origin/master 

. Это скопирует изменения каждого из ваших vli-dev коммитов в новый коммит, основанный на только что выбранном master коммите.

Теперь было бы неразумно беспокоиться о том, действительно ли промежуточные коммиты, созданные таким образом, действительно создают ошибки.(Это мое самое сильное замечание по поводу многих распространенных вариантов использования rebase.) Вы можете проверить каждый из них и проверить его.Если вы обнаружите ошибку в каком-то промежуточном состоянии, вам придется решить, сколько хлопот стоит исправить.В этот момент вы можете создать новую ветвь из прерванного коммита, внести изменения, чтобы он прошел тесты, git commit --amend, а затем переназначить оставшиеся коммиты в этот вновь исправленный коммит.

Другая вещьсделать, это очистить все те ненужные теперь тайники.Если у вас было множество действительно непринятых изменений, вы захотите применить их в своей перебазированной ветке;но остальное можно отбросить (git stash drop).Или, если вы абсолютно уверены, что ни один из тайников не имеет важных данных, вы можете

rm .git/refs/stash
rm .git/logs/refs/stash
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...