В 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.

622   4  
git

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

    Ничего не найдено.