2017-02-15 2 views
1

отправляю это здесь так, а не WebApps StackExchange, потому что я знаю , что она относится к git, но я не уверен, что она включает в себя GitHub, а также.Почему `` GIT дифф автозаполнения на ветку, а не файл

Предположим, у меня есть репо foo на моей машине по адресу /home/user/foo, который является моим текущим рабочим каталогом, и у меня есть файл в репо: /home/user/foo/main.sh.

Я работаю над веткой master (хотя я не уверен, что имеет значение, в какой ветке я веду), и я вношу некоторые изменения в main.sh. Я хочу, чтобы увидеть изменения, которые я сделал только к этому файлу, поэтому я ввожу:

$ git diff ma<tab> 

Почему это автозаполнение для master, а не main.sh? На самом деле, более разумно, я не думаю, что он должен автозаполняться вообще, потому что всего 2 буквы ma, это неоднозначно. Я просмотрел описание на странице руководства git diff, но я ничего не вижу, если у кого-то есть приоритет над другим.

+0

Ничего общего с GitHub. Подключение к Git немного слабо: все автозаполнение bash выполняется в bash. Это зависит от того, кто пишет автозаполнение, чтобы решить, как его реализовать. В ответе на xbonez ниже показано, что они использовали '-', чтобы решить, следует ли рассматривать следующий аргумент как имя ветки (которое является допустимым селектором фиксации) или имя пути. – torek

ответ

1

Человек страница мерзавца-дифф содержит следующее:

Git Diff [--options] [-] [путь ...]

Итак, если вы ищете для git diff для файла/пути, он должен следовать -- (двойные дефисы). Вы обнаружите, что если вы сделаете git diff -- ma<tab>, он будет автоматически заполнен к имени файла, а не к ветке.

git diff $branch 
git diff -- $filePath 
+0

Справа, gotcha. Да, я прочитал это на странице руководства. Я предполагаю, что тогда ответ заключается в том, что даже если 'git diff $ filePath' неверен,' git' "знает", что вы имеете в виду в этой точке (если нет ветки с тем же префиксом), поэтому он автоматически заполняет файл. – drewyupdrew

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