힘내 당겨 후 세부 변경


130

힘내 뽑기 후 출력은 변경 량에 대한 요약을 제공합니다.

각 파일 또는 일부 파일의 자세한 변경 내용을 어떻게 볼 수 있습니까?

자, Jefromi에게 내 질문은 다음과 같습니다.

  1. 내가 마스터하기 위해 당기고 있는지 어떻게 알 수 있습니까? 내가 한 건 "git pull"뿐입니다.

  2. 마스터는 무엇을 가리키며 Git의 두 기본 헤드 인 마스터와 HEAD의 차이점은 무엇입니까?

  3. 특정 파일에서 자세한 변경 내용을 보려면 어떻게합니까?

  4. 마지막에 의한 요약 출력의 변경 내용을 git pull다시 보려면 어떻게합니까 ?

  5. 차이 무엇 git diffgit whatchanged?


4
편집을 통해 새로운 질문을 반복해서 추가하는 것은 시스템이 사용되는 방식과 정확히 일치하지 않습니다. 매뉴얼 페이지를 보거나 시도하여 많은 질문에 쉽게 대답 할 수 있습니다. 예를 들어, git diffdiff를 git whatchanged명확하게 출력하고 커밋 정보 목록 을 명확하게 출력하고 각 파일에는 변경된 파일 목록이 포함됩니다.
Cascabel

아마도 당신의 낮은 담당자 때문입니다.
TED

@TED ​​댓글을 남기려면 답장이 50 명, 투표는 15 명입니다.
Cascabel

우분투가있는 랩톱에서는 때로는 작동하지 않는 경우가 있습니다. Centos가있는 다른 컴퓨터를 일시적으로 발견 했으며이 의견을 제시하고 있습니다. 두 컴퓨터에서 Firefox를 사용하고 있습니다.
Tim

매우 이상합니다. 메타로 이동하여 알려진 문제인지보고하십시오.
Cascabel

답변:


204

마스터하기 위해 당기고 있다고 가정하십시오. masterby 의 이전 위치를 참조 master@{1}하거나 git-rev-parse 매뉴얼 페이지master@{10.minutes.ago} 의 수정 버전 지정 섹션을 참조하여 다음과 같은 작업을 수행 할 수 있습니다

  • 모든 변경 사항을보십시오. git diff master@{1} master

  • 주어진 파일에 대한 변경 사항을 확인하십시오. git diff master@{1} master <file>

  • 지정된 디렉토리 내의 모든 변경 사항을 확인하십시오. git diff master@{1} master <dir>

  • 변경 사항 요약을 다시 참조하십시오. git diff --stat master@{1} master

"내가 마스터하고 있는지 어떻게 알 수 있습니까?"라는 질문에 대해서는 브랜치를 사용하는 것이 Git 워크 플로의 중요한 부분입니다. 당신은 항상 어떤 브랜치에 있는지 알고 있어야합니다-변경 사항을 가져 오면, 올바른 브랜치로 당기고 싶습니다! 명령을 사용하여 현재 체크 아웃 된 별표로 별표가있는 모든 분기 목록을 볼 수 있습니다 git branch. 현재 분기 이름도의 출력과 함께 인쇄됩니다 git status. 사용할 명령 페이지를 감추는 것이 좋습니다. 천천히 지식을 익힐 수있는 좋은 방법입니다.

그리고 마지막 질문 : HEAD현재 체크 아웃 된 지점의 이름입니다. 당신은 실제로 사용할 수 있습니다 HEADHEAD@{1}뿐만 아니라 이러한 맥락에서, 그러나 당신이 가면 때문에, 가지를 사용하고 다른 지점을 확인하기 위해 좀 더 강력한입니다. HEAD이제 두 번째 지점 HEAD@{1}이며 지금은 master아닙니다-당신이 원하는 것이 아닙니다!

이와 같은 작은 질문을 많이하지 않으려면 Git 튜토리얼을 살펴보아야합니다. 예를 들어 웹에는 백만이 있습니다.


5
이것은 내 솔루션보다 낫습니다 :)
Christian Oudard

2
나는 그것은 다른 방법으로 주위해야한다 ...이 오래 알고 있지만 : git diff master@{1} master즉, 삽입 삭제 등이 될 그렇지 않으면 변화가 표시됩니다 "뒤로",
ultracrepidarian

2
git diff master@{1} master나를 git diff master~1 master위해 일하지 않았다 대신 나를 위해 일을했다.
unrealsoul007

5
@ unrealsoul007 그러면 상황이 달라졌습니다. master ~ 1은 현재 가리키는 한 마스터의 부모 커밋입니다. 그 커밋에 대한 차이점을 보게 될 것입니다. master @ {1}은 이전 커밋 마스터가 지적한 것입니다. 예를 들어 방금 당기면 여기에 설명 된대로 당기기 전에 마스터 위치가됩니다. 그것이 그렇게하지 않았다면, 당신은 아마도 당신이 당기고 나서 마스터 할 다른 것을했을 것입니다. git reflog master무엇을 이해 하려고 노력하십시오 .
Cascabel

@Jefromi fatal: ambiguous argument 'firstDesign@': unknown revision or path not in the working tree.이 오류가 계속 발생합니다. git reflog firstDesign에는이 출력있습니다 .
unrealsoul007

52

다음과 같이 git pull을 수행한다고 가정 해보십시오.

$ git pull
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From git@dev.example.com:reponame
   a407564..9f52bed  branchname   -> origin/branchname
Updating a407564..9f52bed
Fast forward
 .../folder/filename          |  209 ++++++++-----
 .../folder2/filename2        |  120 +++++++++++---------
 2 files changed, 210 insertions(+), 119 deletions(-)

개정 번호를 사용하여 변경된 내용의 차이점을 확인할 수 있습니다.

$ git diff a407564..9f52bed

5
그리고 당신은 "사용하여 요약을 얻을 수있다 git diff --stat a407564..9f52bed"아니면 그냥 요약 " git diff --summary a407564..9f52bed"
야쿱 Narębski

14
최신 버전의 git의 경우 git pull은 더 이상 변경된 파일 목록을 출력하지 않습니다. 이를 위해서는`git pull --stat '
user10

6

1. 마스터로 당기고 있는지 어떻게 알 수 있습니까? 내가 한 것은 "git pull"뿐입니다.

명령 자체는 다음과 같이 작동합니다.

git pull [options] [<repository> [<refspec>…]]

기본적으로 현재 분기를 나타냅니다. 당신은 사용하여 지점을 확인할 수 있습니다

git branch -a

예를 들어 로컬 및 원격 지점을 나열합니다 ( --- 더 명확하게하기 위해 로컬과 원격 사이에 구분선을 추가했습니다 )

*master
foo
bar
baz
---
origin/HEAD -> origin/master
origin/deploy
origin/foo
origin/master
origin/bar
remote2/foo
remote2/baz

그런 다음 하나의 원격 저장소를 살펴보면 다음 내용을 볼 수 있습니다.

git remote show origin

다음과 같이 나열됩니다.

* remote origin
  Fetch URL: ssh://git@git.example.com:12345/username/somerepo.git
  Push  URL: ssh://git@git.example.com:12345/username/somerepo.git
  HEAD branch: master
  Remote branches:
    foo    tracked
    master tracked
  Local refs configured for 'git push':
    foo    pushes to foo    (up to date)
    master pushes to master (fast-forwardable)

따라서 어디로 향하고 밀 수 있는지 확실하게 알 수 있습니다.

3. 특정 파일에서 세부 사항 변경을 보는 방법은 무엇입니까?

4. 마지막 git pull에 의한 요약 출력의 변화를 다시 보는 방법은 무엇입니까?

가장 쉽고 가장 우아한 방법 (imo)은 다음과 같습니다.

git diff --stat master@{1}..master --dirstat=cumulative,files

그러면 마지막 풀과 현재 작업 상태 사이의 변경 사항에 대한 두 가지 정보 블록이 제공됩니다. 예시적인 출력 (I는 추가 --- 간의 분배기로 --stat그리고 --dirstat더 명확하게 출력) :

 mu-plugins/media_att_count.php                     |  0
 mu-plugins/phpinfo.php                             |  0
 mu-plugins/template_debug.php                      |  0
 themes/dev/archive.php                             |  0
 themes/dev/category.php                            | 42 ++++++++++++++++++
 .../page_templates/foo_template.php                |  0
 themes/dev/style.css                               |  0
 themes/dev/tag.php                                 | 44 +++++++++++++++++++
 themes/dev/taxonomy-post_format.php                | 41 +++++++++++++++++
 themes/dev/template_parts/bar_template.php         |  0
 themes/someproject/template_wrappers/loop_foo.php  | 51 ++++++++++++++++++++++
---
 11 files changed, 178 insertions(+)
  71.3% themes/dev/
  28.6% themes/someproject/template_wrappers/
 100.0% themes/
  27.2% mu-plugins/
   9.0% themes/dev/page_templates/
   9.0% themes/dev/template_parts/
  63.6% themes/dev/
   9.0% themes/someproject/template_wrappers/
  72.7% themes/

2

이 방법은 일종의 해킹이지만 gitkor gitg또는 git-gui다음 과 같은 그래픽 도구를 사용할 수 있습니다 .

git pull
git reset HEAD@{1}
gitg (or gitk or whatever tool you like)

가장 공감대가 높은 대답은 git 도구를 사용하는 가장 좋은 방법을 제공하지만 GUI를 사용하여 변경 사항을 볼 수있는 도구를 사용할 수 있기 때문에이 방법을 사용합니다.

그런 다음 적절하게 당기고 병합하기 위해 추가 작업을 한 git checkout .다음 git pull다시 수행하는 추가 단계가 필요 하지만 추가 두 단계를 처리 할 수있을 정도로 GUI의 차이점을 검사하는 기능을 높이 평가합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.