Невозможно отправить код в репозиторий gerrit git. - PullRequest
1 голос
/ 28 июня 2019

Наша установка разработки имеет вид:

код пользователя ==> репозиторий gerrit ==> репозиторий DEV ==> репозиторий INT

Когда я пытаюсь отправить свой код в репозиторий gerrit, выдается следующая ошибка:

git/master% git push gerrit HEAD:refs/for/master


Counting objects: 7, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 1.05 KiB | 1.05 MiB/s, done.
Total 7 (delta 3), reused 3 (delta 0)
remote: Resolving deltas: 100% (3/3)
remote: Processing changes: refs: 1, done   
remote: ERROR: [1688e36] missing Change-Id in commit message footer
remote: 
remote: Hint: To automatically insert Change-Id, install the hook:
remote:  gitdir=$(git rev-parse --git-dir); scp -p -P 29418 use_abc@rbcm- 
gerrit.abc.mno.com:hooks/commit-msg ${gitdir}/hooks/
remote: And then amend the commit:
remote:  git commit --amend
remote: 
To ssh://abcd.mno.com:29418/datacompiler/DataCompilerDevelopment
! [remote rejected]    HEAD -> refs/for/master ([1688e36] missing Change-Id 
in commit message footer)
 error: failed to push some refs to 'ssh://user_abc@mno- 
 gerrit.abc.mno.com:29418/datacompiler/DataCompilerDevelopment'

Я понял из сообщения об ошибке, что проблема "[1688e36] missing Change-Id in commit message footer"

Т.е. в одном из старых коммитов отсутствует Change-Id, который необходим при нажатии на gerrit.

Когда я гуглил, я обнаружил, что перебазировка - это метод исправления старого сообщения о коммите. (git amend используется для последней модификации сообщения коммита. Но в моем случае исправляемое сообщение довольно старое)

Когда я пытаюсь выполнить перебазирование, я теряю другие коммиты при этом коммите.

 git rebase -i HEAD~5

 pick a09061420 commit message 1.
 pick 046316704 commit message 2.
 pick b5df179e7 commit message 3.
 pick b58fc9c41 commit message 4.
 pick 646bc8899 commit message 5.

Я хочу изменить commit message 4.

Я сделал модификацию, как показано ниже:

 pick a09061420 commit message 1.
 pick 046316704 commit message 2.
 pick b5df179e7 commit message 3.
 reword b58fc9c41 updated commit message 4.
 pick 646bc8899 commit message 5.

Я сохранил файл и нажал его. Но я теряю коммиты с 1-3.

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 28 июня 2019

Вы не потеряете ни одного коммита.Тем не менее, идентификатор коммита для commit-4 и commit-5 (646bc8899) будет изменен после того, как вы внесете свои изменения, потому что вы вносите изменения в commit4, поэтому его идентификатор фиксации будет изменен, а commit-4 является parant для commit-5, следовательно, его идентификатортакже будет изменено.

Я также чувствую, что это не так, как на скриншоте того, что вы видите, потому что вы выполняете его с HEAD ~ 10, а результат содержит только 5 коммитов, тогда как вы должны увидеть 10 коммитов.Если 10 коммитов не существует, вы получите ошибку.Таким образом, все коммиты после commit4 будут иметь новый идентификатор с тем же содержимым.

Например, перед ребазингом, если это было похоже на -

pick b4e6a4d commit message 1.
pick cf8782b commit message 2.
pick c05b513 commit message 3.
pick 4966621 commit message 4.
pick f4297e7 commit message 5.
pick 48eaf3e commit message 6.

, и вы изменили его на:

pick b4e6a4d commit message 1.
pick cf8782b commit message 2.
reword c05b513 message changed from commit message 3.
pick 4966621 commit message 4.
pick f4297e7 commit message 5.
pick 48eaf3e commit message 6.

После нажатия будет получено следующее:

b4e6a4d commit message 1.
cf8782b commit message 2.
f42f02f message changed from commit message 3.
f8a49c4 commit message 4.
3f4e71e commit message 5.
81f5af5 commit message 6.
...