2016-02-21 3 views
2

Возможно, что git merge, даже если текущая ветка имеет незафиксированные изменения. Пример:Как предотвратить слияние git, если текущая ветка имеет незафиксированные изменения

git checkout featureA 
ls >> foo 
git commit -am "added featureA" 
git checkout dev 
ls >> bar     # current branch now has uncommitted changes 
git merge featureA 

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

+0

Добавить их в индекс? В противном случае я не уверен, что это небезопасно. Git избегает слияния, если что-то небезопасно (см. Также «Предварительные слияния чеков»: https://git-scm.com/docs/git-merge#_pre_merge_checks). – Whymarrh

ответ

0

Моей первой мыслью было объявить псевдоним Git, чтобы переопределить команду merge и проверить состояние вашего рабочего каталога и индекса до выполнения операции.

Оказалось, что перезаписать отмену команды Git с помощью псевдонима Git (см. this question для получения дополнительной информации), но вы можете определить псевдоним на уровне оболочки.

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

Определить их как псевдонимы в вашем .gitconfig:

isclean = !(git status --porcelain | grep . && exit 1 || exit 0) 
safemerge = !git isclean && git-merge 

Теперь, когда вы идете в слияние, вы можете запустить git safemerge и слияние не произойдет, если у вас есть неподтвержденные изменения.