Ответ 1
Обратите внимание на вывод при выполнении слияния - он говорит Fast Forward
В таких ситуациях вы хотите:
git merge v1.0 --no-commit --no-ff
Можно ли сделать git merge
, но без коммита?
"man git merge" говорит так:
With --no-commit perform the merge but pretend the merge failed and do not autocommit,
to give the user a chance to inspect and further tweak the merge result before
committing.
Но когда я пытаюсь использовать git merge
с --no-commit
он все равно автоматически фиксируется. Вот что я сделал:
$> ~/git/testrepo$ git checkout master
Switched to branch 'master'
$> ~/git/testrepo$ git branch
* master
v1.0
$> ~/git/testrepo$ git merge --no-commit v1.0
Updating c0c9fd2..18fa02c
Fast-forward
file1 | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$> ~/git/testrepo$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Последующий git log
показывает все коммиты из ветки v1.0, объединенные с master.
Обратите внимание на вывод при выполнении слияния - он говорит Fast Forward
В таких ситуациях вы хотите:
git merge v1.0 --no-commit --no-ff
Вы неправильно понимаете значение слияния здесь.
--no-commit
предотвращает MERGE COMMIT, и это происходит только тогда, когда вы объединяете две расходящиеся истории ветвей; в вашем примере это не так, поскольку Git указывает, что это было слияние "ускоренной перемотки вперед", и тогда Git только последовательно применяет коммиты, уже присутствующие в ветки.
Если вы хотите только зафиксировать все изменения в одном коммите, как если бы вы набрали себя, --squash тоже сделает
$ git merge --squash v1.0
$ git commit
Я предпочитаю этот путь, поэтому мне не нужно запоминать какие-либо редкие параметры.
git merge branch_name
Затем он скажет, что ваша ветка впереди С# commits, теперь вы можете отключить эти коммиты и поместить их в рабочие изменения со следующим:
git reset @~#
Например, если после слияния 1 фиксация выполняется, используйте:
git reset @~1
Когда есть только один коммит в ветке, я обычно делаю
git merge branch_name --ff