Подтвердить что ты не робот

Git: Сравнить все локальные компиляции с удаленной версией репо

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

Вот пример того, что я пытаюсь сделать: в gitk я увижу что-то вроде этого:
* - [mybranch] Добавлено "42" до конца answer.txt(local commit)
* - Добавлен "Hello World" до конца my.txt(локальный коммит)
* - Добавлена ​​'С#/. NET' в начало my.txt(локальная фиксация)
* - < [RemoteRepo] > (исходное репо, с которого я клонировал)

Как я могу просмотреть разницу в сумме всех моих изменений с my.txt и answers.txt по сравнению с исходной версией, которую я проверил из RemoteRepo?

4b9b3361

Ответ 1

Существует три способа (два других из других ответов, приведенных здесь)

1) git diff origin/master master
2) git diff origin/master..master
3) git diff origin/master...master

Первый и второй одинаковые и показывают изменения между концами ведущего и удаленного мастера.

Третий показывает изменения, произошедшие с мастером с последнего нажатия ветки, и я думаю, что это наиболее подходящий вариант, который вы ищете

Ответ 2

Самый готовый ответ

 git show-branch

Что вы можете сделать для большего контроля - это использовать git log приложение git rev-list:

 git log --left-right --graph --cherry-pick \
      --oneline branchname...remote/branchname

Это мой предпочтительный метод и приведет к чему-то вроде

> | fff6bda remote fix
< | c8903ee local fix
< |   724373c Merge branch 'bla' into bla
|\ \  
| < | 2faf547 details
| < | abbdc47 ....
|/ /  
< | befc181 some tagged commit

Включить --decorate, и вы получите что-то близкое к gitk, git -gui и gitweb:

> | fff6bda remote fix
< | c8903ee local fix
< |   724373c (tag_4) Merge branch 'bla' into bla
|\ \  
| < | 2faf547 details
| < | abbdc47 ....
|/ /  
< | befc181 (tag_3) some tagged commit

PRO СОВЕТ 1: Используйте < git config alias.lr log --long-option1 --long-option2 для удобного использования

PRO СОВЕТ 2: Используйте "git config color.ui auto" для немедленного снятия глаз

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

git log --decorate --pretty=oneline --all --not --glob=refs/remotes --no-walk

Оставьте без прогулки, чтобы получить все индивидуальные версии. В этом случае я предпочитаю использовать переключатели, показанные ранее (--graph -left-right)

Объединяет

Если вы хотите четко видеть слияния, включите --boundary

Различные расширенные запросы:

Фильтрация результатов

Git log и rev-list поддерживают целый набор хитрых фильтрующих возможностей, см. справочную страницу

--after '2001-01-01'
--until 'last week'
--author 'martin'
-E -i  --grep='fixes #[0123456789]+'
-S 'new_debug_function'

и многие, многие другие. Это должно дать вам много рычагов, чтобы получить именно ту информацию, которую вы хотите, с почти нулевым усилием.

Что скрывается локально?

То, что находится в записях, но не на пульте (обратите внимание, что нет ссылок на блокировки на удаленных блоках, поскольку в базе данных хранятся штампы, а рефлексы (даже для удаленных веток) всегда отражают локальную историю [1]):

git log $(git rev-list -g stash) --not --glob=refs/remotes 

Все (другие) недостижимые коммиты...

Примечания

  • в моем рабочем процессе эти constitue rebased/amended коммиты и только сброшенные штампы
  • Кроме того, генерация этих данных займет некоторое время в зависимости от размера графика истории.
  • это будет включать в себя любые сброшенные штампы, но не текущие stashes

    Git log $(git fsck --unreachable --full --lost-found |             grep 'commit' | cut -d '' -f3) \   --no-walk --not --glob = refs/remotes --oneline --decorate

Сценарии

Для сценариев замените использование git log на git rev-list, и вы получите только хэши (и еще более script -прочность)

[1] См. также мой предыдущий ответ о том, как переносить задержки между репозициями:

Ответ 3

Простейшая и, конечно же, самая легкая для запоминания команда, которая (как правило) делает то, что вы хотите:

git diff origin

Это показывает разницу между тем, что вы изначально вытащили (источник) и текущую ветку, на которой вы работаете, по умолчанию - master.

Ответ 4

разницу можно просмотреть с помощью git diff A B, он будет сравнивать код в с B:

git diff origin/master master

origin/master - это состояние удаленной главной ветки, когда вы последний раз извлекали (или клонировали) из нее, master - это локальное состояние кода - если вы не переключили ветки при локальной работе.

Ответ 5

для всего   git diff HEAD origin/ "nameofyourbranch"

для конкретного файла   git diff HEAD: "filename" origin/ "nameofbranch": "filename"

Ответ 6

git diff origin/master..master