Следующие инструкции помогут вам в этом:
$ clean=`git diff --cached -b`; \
git apply --cached <(git diff --cached -R); \
echo "$clean" | git apply --cached -; \
clean=
Для выпусков git до 1.7.0, происходит сбой, если один или несколько файлов имеют все пробелы. Например
$ git diff --cached -b
diff --git a/file1 b/file1
index b2bd1a5..3b18e51 100644
diff --git a/file2 b/file2
new file mode 100644
index 0000000..092bfb9
--- /dev/null
+++ b/file2
[...]
Пустая дельта (из file1
выше, которая действительно должна быть подавлена) делает git-apply
несчастной:
fatal: patch with only garbage at line 3
ОБНОВЛЕНИЕ: В версии 1.7.0 git эта проблема решена .
Скажем, наш репозиторий находится в следующем состоянии:
$ git diff --cached
diff --git a/foo b/foo
index 3b18e51..a75018e 100644
--- a/foo
+++ b/foo
@@ -1 +1,2 @@
-hello world
+hello world
+howdy also
Затем мы могли бы запустить приведенные выше команды для разветвления индекса и рабочего дерева:
$ git diff --cached
diff --git a/foo b/foo
index 3b18e51..1715a9b 100644
--- a/foo
+++ b/foo
@@ -1 +1,2 @@
hello world
+howdy also
$ git diff
diff --git a/foo b/foo
index 1715a9b..a75018e 100644
--- a/foo
+++ b/foo
@@ -1,2 +1,2 @@
-hello world
+hello world
howdy also
Если все изменения только для пробелов, вы увидите
error: No changes
Я подозреваю, что исправление индекса и оставление нежелательных изменений в рабочем дереве удивит или даже раздражит большинство пользователей, но это вопрос поведения, о котором спрашивается.