Ошибка при записи на git

mstdmstd

Новичок
Всем привет,
При попытке записать свои изменения на git-сервер получаю ошибку:

Код:
$ git pull origin dev4
Password for 'https://[email protected]':
remote: Counting objects: 21, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 21 (delta 12), reused 0 (delta 0)
Unpacking objects: 100% (21/21), done.
From https://bitbucket.org/projectname/projectname
 * branch            dev4       -> FETCH_HEAD
   56fba94..77dbc70  dev4       -> origin/dev4
Updating 56fba94..77dbc70
error: Your local changes to the following files would be overwritten by merge:
        application/config/config.php
        index.php
Please, commit your changes or stash them before you can merge.
Aborting
Я выполняю

Код:
git stash
Но при этом перезаписываются не только 2 файла из списка выше(так как они были изменены другим юзером) но и ВСЕ файлы
с которыми я работал и мне надо опять их восстанавливать
Но при попытке коммита я получаю ошибку

А как лучше сделать чтобы мне вручную пришлось редактировать только 2 измененных файлах а не все файлы ?

Спасибо!
 

WMix

герр M:)ller
Партнер клуба
спрячь эти 2, зафиксируй изменения для остатка
 

fixxxer

К.О.
Партнер клуба
еще замечу, что для такого work-in-progress при совместной работе в одной ветке часто удобнее делать не pull, а fetch + rebase
 

Фанат

oncle terrible
Команда форума
мне кажется, что классический вариант - это таки commit your changes.
То есть сделать новую ветку из текущей, закоммитить все изменения в неё, потом счекаутить обратно основную ветку, сделать пулл, потом чекаут новую ветку, и смержить основную в неё.
в итоге мержить придется только эти два файла.
не?
 

AnrDaemon

Продвинутый новичок
Да пофиг как, главное, чтобы человек чётко представлял, что он делает.
 

Вурдалак

Продвинутый новичок
мне кажется, что классический вариант - это таки commit your changes.
То есть сделать новую ветку из текущей, закоммитить все изменения в неё, потом счекаутить обратно основную ветку, сделать пулл, потом чекаут новую ветку, и смержить основную в неё.
в итоге мержить придется только эти два файла.
Какую проблему решают подобные манипуляции?
 

MiksIr

miksir@home:~$
мне кажется, что классический вариант - это таки commit your changes.
То есть сделать новую ветку из текущей, закоммитить все изменения в неё, потом счекаутить обратно основную ветку, сделать пулл, потом чекаут новую ветку, и смержить основную в неё.
в итоге мержить придется только эти два файла.
не?
Ну в общих чертах это то, что git stash и делает
 

WMix

герр M:)ller
Партнер клуба
@Фанат, с точки зрения svn вероятнее всего это единственный красивый способ (хотя на update все уже пометится, останется порезать да флажок "конфликт разрешон" установить), но у гита есть пару доп. фишек.
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
но у гита есть пару доп. фишек.
Насколько я понимаю, стэш нужен для того, чтобы по-быстрому загрузить другую ветку, что-то в ней подправить,и вернуться к предыдущей задаче.
А здесь чуваку надо смержиться. То есть по уму надо бы сделать коммит.
 

AmdY

Пью пиво
Команда форума
А почему ты ожидаешь, что будут застешены только эти два файла? Всё же нормально работает. Не пользуйся пока стешем, если не понимаешь что происходит внутри.
Коммить изменения, делай пулл, будет ошибка и нужно резолвить конфликты, т.к. изменено несколько одинаковых файлов в разных коммитах. Это абсолютно нормальная ситуация для которой и нужен гит.
ПОльзуйся гуи для гита, в том же phpstorm все прекрасно делается через интерфейс.
 

Фанат

oncle terrible
Команда форума
Не понял, а зачем тут нужна другая ветка?
Ну, тут сложно сказать.
Возможно, и не нужна. Тогда коммит прямо в эту и потом пулл с мержем.
Просто если чувак по какой-то своей задаче кропает, то очевидно лучше в отдельной ветке.
 

MiksIr

miksir@home:~$
Ну, тут сложно сказать.
Возможно, и не нужна. Тогда коммит прямо в эту и потом пулл с мержем.
Просто если чувак по какой-то своей задаче кропает, то очевидно лучше в отдельной ветке.
Коммит - это коммит в истории. Если у тебя незаконченная работа - то коммит получается вреден. Конечно, можно будет потом следующий коммит сделать amend, но это и забыть можно. В итоге поимеем или некрасивую историю или сидеть ее править. Зачем, если есть stash, который сделает скрытую ветку, с текущими изменениями и потом вернет их с мерджем. Хотя, если говорить про Шторм, я лично предпочитаю встроенный shelve.
 

MiksIr

miksir@home:~$
shelve это какая-то магия за пределами гита, как-то боязно её юзать. а что она делает в отличие от stash?
Да ничего особенного ;) Просто более удобно интегрирован в IDE. Проще смотреть список "сохранок", их содержимое, можно unshelve определенные файлы только и т.п., можно посмотреть список старых сохранок.... Так как работал изначально еще c svn - привык к нему. Вроде проблем не было, за исключением случая, когда туда захотели несколько десятков тысяч файлов зафигачить.
 

MiksIr

miksir@home:~$
Не по совсем по теме, а как же daily commits?
Ну, ИМХО, в идеале должны быть task-commits с daily task-ами ;) Ну даже если не так - все же хочется комитить какой-то логически законченный блок работ, а на момент необходимости обновиться - такого может и не быть (ибо скорее всего обновление как-раз и связано с получением чего-то, что нам не хватает).
 

WMix

герр M:)ller
Партнер клуба
Уточните плиз какими крмандами?
Код:
git stash
- с указанием именно этих 2 файлов?
там как хочешь, можно все спрятать. можешь rebase залепить можно -p влепить можно как Фанат, говорит.
ответ
Да пофиг как, главное, чтобы человек чётко представлял, что он делает.
советую разобраться самому что происходит и выбрать стратегию
 
Сверху