Есть ли способ автоматического объединения заметок, если коммиты для этих заметок раздавлены?

Например:

git commit -am "Something"
git notes append -m "Dark "
git commit -am "Something"
git notes append -m "Side"

git rebase -i
# now I squash two commits and I expect to see "Dark Side" here
# but it show that note is undefined
git notes show 

1 ответ

Решение

Проблема почти наверняка в вашем конфиге; при условии, что в противном случае у вас есть конфигурация по умолчанию, вам нужно установить notes.rewriteRef возможность refs/notes/commits чтобы это работало.

Волшебная команда, которая вам нужна, такова:

git config notes.rewriteRef refs/notes/commits

После вышесказанного, раздавив коммитов следует объединить две ноты.

Однако между ними будут новые строки; Я подозреваю, что отключение такого поведения, чтобы вы получили все в той же строке, что и в вашем примере, потребовало бы взломать исходный код Git.

Фон

От git help config(выделение мое):

notes.rewriteRef

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

Не имеет значения по умолчанию; Вы должны настроить эту переменную, чтобы включить перезапись заметки.Установите этоrefs/notes/commitsвключить перезапись для заметок по умолчанию.

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

(Смотрите также описания для notes.rewriteMode а также notes.rewrite.<command>оба из которых по умолчанию соответствуют значениям, которые нам нужны, т.е. concatenate а также true соответственно.)

пример

Вот что-то похожее для приведенного выше теста:

$ git init
Initialized empty Git repository

$ git config notes.rewriteRef refs/notes/commits

$ git add a # Here's a file I created earlier

$ git commit -am 'Initial commit'
[master (root-commit) 93219cb] Initial commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 a

$ echo a >>a

$ git commit -am 'Something'
[master 3c17aca] Something
 1 files changed, 1 insertions(+), 0 deletions(-)

$ git notes append -m 'Dark '

$ echo b >>a

$ git commit -am 'Something'
[master 6732d81] Something
 1 files changed, 1 insertions(+), 0 deletions(-)

$ git notes append -m 'Side'

$ git rebase -i HEAD~2 # Will squash the last commit into the one before and accept the default commit message.
[detached HEAD 552668b] Something
 1 files changed, 2 insertions(+), 0 deletions(-)
Successfully rebased and updated refs/heads/master.

$ git show
commit 552668b4b96e4b2f8fcd7763dcc115edd159eb89 (HEAD, master)
Author: me_and <not.an@email.address>
Date:   Wed Jan 30 10:09:10 2013 +0000

    Something

    Something

Notes:
    Dark

    Side

diff --git a/a b/a
index 7898192..4ac2bee 100644
--- a/a
+++ b/a
@@ -1 +1,3 @@
 a
+a
+b
Другие вопросы по тегам