2016-01-21 3 views
0

У меня есть файл с исправлением , он содержит кучу модификаций, которые я хотел бы применить к ветке git. Но я не хочу делать одну уникальную фиксацию со всеми этими изменениями, вместо этого я бы хотел, чтобы разделил ее на 2 или 3 коммита.Git one-liner для применения патча интерактивно

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

git apply mypatch 
git add -p 

мне было просто интересно, если это возможно, чтобы сделать это в одна команда git. Я ничего не нашел в файлах git apply, а также в git add.

EDIT

Я не думаю, что этот вопрос следует рассматривать как дубликат Syntax for Git aliases with multiple commands как этот вопрос (и ответ) не требуется не включает параметр, переданный на псевдоним.

+0

Почему downvoted? Любопытно – arainone

+0

Вы можете использовать псевдоним для их комбинирования или функцию, если хотите сохранить синтаксис git-like с новой комбинированной командой. – 8bittree

+0

@ 8bittree, который кажется хорошим решением. Не могли бы вы предоставить мне такой псевдоним (или функцию) в ответ? – arainone

ответ

1

Я отвечаю на свой вопрос, спасибо комментарию @ 8bittree.

Есть по крайней мере 2 способа сделать это:

  • с использованием функции оболочки (see 8bittree's answer)
  • используя GIT псевдоним.Я предпочитаю это решение, как она включает в себя только .gitconfig, нет необходимости изменять .bashrc и мерзавец оболочки Завершение работ для нового псевдонима показано, наряду с другими стандартными командами GIT в списке завершения

Так что это то, что Я заканчивал добавить к моему глобальному .gitconfig:

[alias] 
    # interactive apply patch 
    ipatch = "!f() { git apply $1; git add -p; }; f" 

Я тогда просто сделать:

git ipatch mypatchfile 
-1

Вы можете использовать команду unix «patch» (отдельно от git). Таким образом, Гит ничего не узнает о «патче». Гит просто подумает, что вы регулярно редактировали. Выход «мерзавец шоу» и «мерзавец дифф» совместим с командой UNIX «заплата»:

# assuming "my-git-repo" is clean... 
cd my-git-repo 
patch -p1 < my.patch 
git status 

На данный момент вы можете использовать «мерзавец добавить»/«мерзавец совершить», чтобы создать последовательность фиксаций вас хотеть.

+0

В этом контексте 'git apply' делает так же, как unix 'patch', не более того. Измененные файлы не выполняются для фиксации, если это то, о чем вы думали. Кроме того, вопрос заключается в том, чтобы найти способ сделать интерактивную «git apply», по одной команде – arainone

1

Как уже упоминалось в моем комментарии, вы можете получить аналогичный эффект с помощью функции. После нескольких размышлений я не уверен, будет ли работать псевдоним, поскольку вам нужно указать файл исправления и, возможно, некоторые параметры. Вот пример функции, которую вы можете добавить в свой .bashrc, вам, возможно, придется настраивать, если вы используете оболочку, отличную от Bash. Я думаю, что он должен работать с Zsh, а может быть, с Ksh, но я не тестировал его с ними.

function git() { 
    # Allows you to call `git ipatch patchfile` 
    # Change ipatch to whatever you want the git command to be 
    if [[ "$1" = ipatch ]]; then 
     shift 
     # Specify the full path to git, otherwise infinite recursion 
     # Alternatively, name the function something else 
     /usr/bin/git apply "[email protected]" 
     /usr/bin/git add -p 
    else 
     /usr/bin/git "[email protected]" 
    fi 
} 

Если вы хотите добавить больше команд пользовательского GIT, это может быть стоит посмотреть в case statement, а не длинной цепи if с.

Смежные вопросы