Git: можем ли мы сравнить две поэтапные версии одних и тех же файлов? - PullRequest
2 голосов
/ 06 октября 2011

Можно ли дважды поставить один и тот же файл и сравнить (изменить) двухступенчатую версию? Пример с файлом myclass.java:

  • Я ставлю свой файл ==> git add myclass.java (подготовленный файл версии 1)
  • Я делаю некоторые изменения в этом файле
  • Я снова ставлю свой файл (готовая версия файла 2)

Могу ли я сравнить версию подготовленного файла 1 и версию подготовленного файла 2?

Thx!

Ответы [ 2 ]

4 голосов
/ 06 октября 2011

Вторая git add перезаписывает первую, но вы все равно можете получить разницу.

# edit edit edit
$ git add myclass.java
# edit some more

Теперь git diff покажет вам разницу между промежуточным файлом и последними правками.Если вы хотите сделать различие между промежуточным файлом и последним коммитом, вам нужно сделать git diff --staged.

3 голосов
/ 06 октября 2011

Индекс Git - это место, где файлы размещаются для фиксации;взгляните на этот StackOverflow ответ для получения дополнительной информации.Когда вы готовите файлы для фиксации, индекс отражает самую последнюю поэтапную информацию.Повторная установка файла изменит индекс Git, чтобы отразить содержимое файла в рабочем каталоге.

Однако после некоторой дополнительной работы вы сможете увидеть содержимое файла таким, каким оно было для каждого этапа.Вы можете использовать git ls-files после каждого этапа, чтобы получить список файлов blobs , которые затем можно использовать позже для сравнения с помощью diff или другого инструмента различий.

Вот небольшой пример сеанса в качестве примера.

$ git init
Initialized empty Git repository in /home/user/tmp/.git/
$ echo "foo" > foo
$ git add foo
$ git ls-files --stage
100644 257cc5642cb1a054f08cc83f2d943e56fd3ebe99 0   foo
$ echo "bar" > foo
$ git add foo
$ git ls-files --stage
100644 5716ca5987cbf97d6bb54920bea6adde242d87e6 0   foo
$ git cat-file blob 257cc56 > foo.257cc56
$ git cat-file blob 5716ca5 > foo.5716ca5
$ diff foo.257cc56 foo.5716ca5 
1c1
< foo
---
> bar

Но это большая работа, требующая тщательного планирования и хранения значений хэша больших двоичных объектов.

...