Как предотвратить использование автозапуска с помощью Git?

Я пытаюсь объединить локальную ветвь в мастер-ветку, не имея Git для создания автосекретаря. Я хотел бы «взять в руки» то, что я хотел бы объединить в мастера.

Когда я использую команду diffifool от Git, я могу различать и выбирать, что я хочу добавить в основную ветку. Но тогда, когда я схожу, я потеряю то, что я выбрал раньше, потому что Git сделает автопроизводитель. Я могу зафиксировать изменения в master до слияния, но делать это кажется неестественным.

И mergetool Git доступен только тогда, когда есть конфликты из слияния. Но если Git делает automerge, то обычно нет конфликтов, поэтому я не могу запустить команду mergetool.

Обновить:

Я начинаю думать, что я пытаюсь сделать, это плохая практика, или это просто невозможно. То есть, чтобы объединить ветвь темы и только слить ее, что мне нужно от разницы. И в дополнение, чтобы это отразилось на истории. Во всяком случае, вопрос, который я опубликовал, всплыл при экспериментировании с Git.

Вы пытаетесь обойти Git от участия в процессе слияния и вручную отбирать каждую строку каждого модифицированного файла для объединения. Это не то же самое, что git cherry-pick . Также не будет git merge --no-commit и т. Д. Help. Вам нужно будет сделать:

 $ git checkout master $ git difftool -t kdiff3 local-branch HEAD 

В окне KDiff3 левой стороной ( A ) является ваша локальная ветвь, а правая сторона ( B ) – ваша текущая ветка (мастер) .

Выберите « Merge | Merge Current File Merge | Merge Current File из меню (или нажмите яркую ромбовидную иконку с тем же названием).

Затем вам будет показан diff и конфликты (если есть) для каждого файла. И у вас будет возможность выбрать левую или правую сторону ( A или B ) или и то и другое, и / или вручную настроить объединенный файл.

С другой стороны, что-то говорит мне, что у вас есть несколько больших проблем с вашим рабочим процессом.

 git merge --no-commit --no-ff  

Имеет ли это.

Когда вы его выполнили, изменения из local-branch применяются, но еще не поставлены.

Затем вы можете посмотреть изменения, которые будут применяться, и – в случае, если вы хотите взять их все – примените их к

 git commit -a 

В противном случае выберите файлы, которые нужно взять, выполните их с помощью git add и, наконец, передайте их с помощью git commit . Восстановите ненужные файлы, затем с помощью git checkout -- filename .

Я вижу, что вы, возможно, захотите сделать это, если не доверяете автоматическому слиянию, потому что два изменения в разных местах в файле (которые выполняются на разных ветвях) могут не вызывать автоматическое слияние, чтобы вызвать конфликт, но на самом деле не могут работать вместе.

Вы можете посмотреть, как использовать пользовательский драйвер слияния. На этой странице описано, как это сделать.

Git – как принудительно слить конфликт слияния и вручную объединить выбранный файл

Альтернативой было бы найти файлы, которые сначала отличаются от ветвей, прежде чем выполнять слияние, затем проверьте файл в соответствующей ветке, чтобы убедиться, что вы получаете чистый слияние и функциональный код, содержащий один или два из двух изменений.

 git diff --name-only   git checkout  --  

Я думаю, вы хотите, чтобы вишневый выбор индивидуальных изменений:

 git checkout master git log --reverse --oneline topic ^master 

а затем вызовите git cherry-pick для каждой фиксации, которую вы хотите иметь в главной ветке.

Если оставшиеся изменения в ветке темы должны быть сохранены, вы также можете переустановить эту ветку поверх нового мастера:

 git rebase master topic 
  • Как сравнить локальную ветвь git с удаленной ветвью?
  • Что означает `..` в ссылках на git?
  • Давайте будем гением компьютера.