Можно ли это сделать 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.
--no-commit
коммутатор действует только в том случае, если не возникает конфликта, в случае конфликта git никогда не будет автоматически фиксироваться.rm .git/MERGE_HEAD
позже, что заставит git забыть, что слияние произошло.Automatic merge went well; stopped before committing as requested
git merge BRANCHENAME --no-commit --no-ff
оставил мою рабочую область в состоянии "мергинг" мерзавец. Не совсем уверен, что именно это делает, но простойgit stash save
иgit stash pop
цикл, казалось, вернул все на круги своя; с только что измененными файлами из целевой ветви на месте, как предполагалось, и больше не статус MERGING.Вы неправильно понимаете значение слияния здесь.
В
--no-commit
препятствует тому , MERGE COMMIT произойдет, и это происходит только тогда , когда вы объединяете две расходящиеся ветви истории; в вашем примере это не так, поскольку Git указывает, что это было слияние «ускоренной перемотки», и тогда Git только последовательно применяет коммиты, уже присутствующие в ветви.источник
git help merge
=> "При--no-commit
выполнении слияния, но притворяется, что слияние не выполнено и не выполняется автоматическая фиксация, чтобы дать пользователю возможность проверить и дополнительно настроить результат слияния перед фиксацией. " Ключ, конечно, использует его в сочетании с--no-ff
Если вы хотите зафиксировать все изменения в одном коммите, как если бы вы набрали текст самостоятельно, --squash сделает то же самое
источник
git merge v1.0 --no-commit --no-ff
Я предпочитаю этот способ, поэтому мне не нужно запоминать какие-либо редкие параметры.
Затем он скажет, что ваша ветвь впереди "
#
" коммитов, теперь вы можете отключить эти коммиты и поместить их в рабочие изменения следующим образом:Например, если после слияния это 1 коммит вперед, используйте:
Примечание. В Windows требуются кавычки. (Как отметил Джош в комментариях) например:
источник
git reset "@~1"
Когда есть только один коммит в ветке, я обычно делаю
источник