Как обойти ловушки предварительной фиксации после устранения конфликтов слияния? - PullRequest
0 голосов
/ 15 апреля 2020

TLDR: git rev-parse -q --verify MERGE_HEAD ошибки, когда НЕ в состоянии слияния. Как я могу получить аналогичную команду, которая выдает ошибку, когда мы находимся в состоянии слияния?


Проблема: , когда я сливаю master в свою ветку, и она имеет конфликты, я должен вручную исправить их, а затем зафиксировать. Однако в некоторых случаях у меня слишком много изменений, исходящих от мастера, поэтому я бы предпочел просто пропустить хуки перед фиксацией.

Частичное решение: Я мог бы просто запустить git commit --no-verify и объединить вещи, но это потому, что я знаю о флаге. Другие разработчики могут не знать об этом, и поэтому (1) они тратят больше времени, чем необходимо, ожидая запуска ловушек перед фиксацией, и (2) так как это может занять слишком много времени, они, как правило, реже возвращают мастер (предположение) .

Почти окончательное решение: Я нашел способ определить, нахожусь ли я в состоянии слияния, используя git rev-parse -q --verify MERGE_HEAD. Он возвращает га sh в состоянии слияния и ошибки, когда НЕ в состоянии слияния. Но мне нужно как раз наоборот. Мне нужно, чтобы он выдавал ошибку, когда я нахожусь в состоянии слияния, чтобы я мог добавить его в качестве ловушки перед фиксацией ко всем моим ловушкам. Это приведет к сбою в первой строке, а затем не выполнит следующую команду.

  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.js": [
      "git rev-parse -q --verify MERGE_HEAD",
      "eslint --max-warnings 0 --fix"
    ],
    "*.scss": [
      "git rev-parse -q --verify MERGE_HEAD",
      "stylelint 'app/**/*.scss'"
    ],
    "*.{js,json,yml,scss,md}": [
      "git rev-parse -q --verify MERGE_HEAD",
      "prettier --write"
    ],
    "*": [
      "bundle exec rubocop --auto-correct --force-exclusion"
    ]
  },

Обратите внимание, что вышеупомянутое не работает. Чтобы это работало, все, что нам нужно, это обратить эффект с git rev-parse -q --verify MERGE_HEAD, т. Е. Он должен выдавать ошибку, когда мы находимся в состоянии слияния. Как я могу сделать это с помощью простой команды?

1 Ответ

1 голос
/ 16 апреля 2020

Рассматривали ли вы отрицание результата вашей первоначальной команды? например,

git rev-parse -q --verify MERGE_HEAD && false

Если вы находитесь в середине слияния, правая часть имеет значение true, поэтому false оценивается и команда завершается с кодом состояния 1.

...