Як дізнатись, до якого коміту додано певний код?


82

Я хочу з'ясувати, до якого коміту я додав код, наведений нижче:

if (getListView().getChildCount() == 0)
                getActivity().findViewById(android.R.id.empty).setVisibility(View.VISIBLE);

Як мені цього досягти?

Відповіді:


77

Запустити git blameна файлі. Він покаже вам ідентифікатор коміту, дату та час, а також хто це зробив - для кожного рядка. Потім просто скопіюйте ідентифікатор коміту, і ви зможете використовувати його в git log <commit>або git show <commit>.

Наприклад, у мене є файл, який називається test.txt, із рядками, доданими до різних комітів:

$ cat test.txt
First line.
Second line.

Запуск git blame:

$ git blame test.txt
^410c3dd (Leigh 2013-11-09 12:00:00 1) First line.
2365eb7d (Leigh 2013-11-09 12:00:10 2) Second line.

Перший біт - це ідентифікатор коміту, потім ім'я, потім дата, час, часовий пояс і, нарешті, номер рядка та вміст рядка.


22
Проблема в тому, що це відображається лише тоді, коли ті файли, де востаннє змінювались, а не коли вони були додані.
Енсонік

@ensonic Ця відповідь може бути цікаво , якщо це так (наприклад , лінія була переміщена, або зміна пробільні): stackoverflow.com/a/5816177/812680
MCLS

3
Корисним додатковим є отримання результатівgit blame test.txt | grep 'First line'
Джонатан Локлі

3
Це не відповідає на запитання ОП. У нас виникла проблема, коли все наше сховище пройшло через зміну "коду з повторним відступом", щоб зменшити вкладки з 4 пробілів на 2. З цього моменту вся звинувачення в git завжди виявлятиме хлопця, який змінив відступ коду - не той, хто його ввів. git log -S робить свою справу.
Motti Shneor,

78
git log -S searchTerm

дає вам коміти, в яких було введено пошуковий термін.


7
Я думаю, що це найкраща відповідь, оскільки ОР хотів шукати доданий код (а не файл).
dr_

Я згоден - у мене виникла проблема, коли все сховище пройшло сеанс "повторного відступу коду", щоб зменшити вкладки з 4 пробілів до 2. З цього моменту вся звинувачення git завжди буде розкривати хлопця, який переставив код - не той, хто його ввів. git log -S робить свою справу.
Motti Shneor

42

Існує щось швидше, ніж винесення звинувачення у повному файлі. Якщо рядок ${lineno}і файл є, ${filename}ви можете:

git blame -L ${lineno},${lineno} ${filename}

Приклад:

git blame -L 2,2 test.txt

5
Це насправді не відповідає на запитання - якщо тільки цей рядок коду ніколи не змінювався. Це покаже, хто є користувачем, який востаннє змінив ці рядки коду. Не той, хто їх представив. git log -S, однак, буде. Однак корисна техніка ...
Мотті Шнеор,

20
git log -S "mention here line of code" [file-path]    

Наприклад:

git log -S "First line" test.txt         

Надання шляху до імені файлу очевидне, оскільки здебільшого ми хочемо знати, хто ввів певний сегмент коду в певний файл.


Вибачте, я не можу зрозуміти - що слід помістити в "згадайте тут рядок коду". номер рядка? фактичний вміст рядка? Текст для пошуку? Чи можете ви бути яснішими?
Motti Shneor,

1
ГАРАЗД. Я ним скористався і здивувався результатам. це ЖИТТЯ ЗБЕРЕЖИТЕЛЯ. справді. У нашому досить незграбному та паршивому корпоративному сховищі якийсь розумник вирішив змінити інтервал між вкладками з 4 на 2 на 1,2 мільйона рядків коду. Звичайно, з цього моменту - git вини безглуздо, - тому що кожен проклятий рядок змінився тим самим неприємним задумом щодо повторного відступу джерел. Отже - це справді дало мені мотузку, яка мені була потрібна - знайти, хто «винайшов» рядок коду, і не останню людину, яка його змінила. ДЯКУЮ. Велика рука.
Motti Shneor

Дякуємо, що оцінили.
Аншул Сінгхал

1
У терміналі Linux потрібні одинарні лапки для рядка коду:git log -S 'some code' path/to/file.c
Даніель Холмс,

Це була паличка-виручалочка! Дякую!
Саїф Аль Фалах,

0

Якщо код зберігається у Gitсховищі, а intellijIDE разом із плагіном Git використовується для перегляду коду, то я знайшов такий спосіб дуже інтуїтивно зрозумілим:

  1. Відкрийте файл у intellij
  2. Перейдіть до контекстного меню -> Git -> Анотація.
  3. З'явиться нове вікно, де кожен рядок у новому вікні повідомляє, хто здійснив фіксацію цього рядка.

Наступні скріншоти служать для посилань:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.