В Git слияние без автоматической фиксации
можно сделать 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.
4 ответов:
обратите внимание на вывод при выполнении слияния-он говорит
Fast Forwardв таких ситуациях, вы хотите сделать:
git merge v1.0 --no-commit --no-ff
вы неправильно понимаете значение слияния здесь.
на
--no-commitпредотвращает фиксацию слияния, и это происходит только при слиянии двух расходящихся историй ветвей; в вашем примере это не так, поскольку Git указывает, что это было "быстрое вперед" слияние, а затем Git применяет только фиксации, уже присутствующие в ветви последовательно.
Если вы хотите только зафиксировать все изменения в одной фиксации, как если бы вы набрали сами, -- squash тоже сделает
$ git merge --squash v1.0 $ git commit
Я предпочитаю этот способ, поэтому мне не нужно запоминать какие-либо редкие параметры.
git merge branch_nameзатем он скажет, что ваша ветка впереди # commits, теперь вы можете вытащить эти коммиты и поместить их в рабочие изменения со следующим:
git reset @~#например, если после слияния это 1 фиксация вперед, используйте:
git reset @~1
Comments