가능합니까?
기본적으로 원격 저장소는 다음을 사용하여 가져옵니다.
git pull
이제 내 쪽의 물건을 건드리지 않고이 당김이 어떻게 바뀌는 지 (diff)를 미리보고 싶습니다. 그 이유는 내가 당기는 것이 "좋은"것이 아닐 수 있으며 다른 사람이 내 저장소를 더러워지기 전에 수정하기를 원하기 때문입니다.
가능합니까?
기본적으로 원격 저장소는 다음을 사용하여 가져옵니다.
git pull
이제 내 쪽의 물건을 건드리지 않고이 당김이 어떻게 바뀌는 지 (diff)를 미리보고 싶습니다. 그 이유는 내가 당기는 것이 "좋은"것이 아닐 수 있으며 다른 사람이 내 저장소를 더러워지기 전에 수정하기를 원하기 때문입니다.
답변:
를 수행 한 후 a git fetch
를 수행 git log HEAD..origin/master
하여 마지막 공통 커밋과 오리진의 마스터 브랜치 사이의 로그 항목을 표시하십시오. diff를 표시하려면 git log -p HEAD..origin/master
각 패치를 표시하거나 git diff HEAD...origin/master
(두 개가 아닌 세 개의 점)을 사용하여 단일 diff를 표시하십시오.
A가 가져 오는 일을하는 경우에만 업데이트하기 때문에 일반적으로 인출 취소 할 필요는 없다 원격 지점과의 아무도 당신의 지점을. 모든 원격 커밋에서 풀 앤 병합을 수행 할 준비가되지 않은 경우 git cherry-pick
원하는 특정 원격 커밋 만 수락 하는 데 사용할 수 있습니다 . 나중에 모든 것을 얻을 준비가 git pull
되면 나머지 커밋에 의지가 병합됩니다.
업데이트 : 왜 git fetch를 사용하지 않으려는지 확실하지 않습니다. 모든 git fetch는 원격 브랜치의 로컬 복사본을 업데이트합니다. 이 로컬 사본은 브랜치와 관련이 없으며 커밋되지 않은 로컬 변경과는 관련이 없습니다. 나는 안전하기 때문에 cron 작업에서 git fetch를 실행하는 사람들에 대해 들었습니다. (하지만 일반적으로 권장하지는 않습니다.)
git diff ...@{u}
git diff HEAD...origin/master
원산지 / 마스터가 업스트림 지점 인 경우 와 동일합니다.
나는 git fetch 가 당신이 찾고있는 것이라고 생각 합니다.
로컬 저장소의 색인에 커밋하지 않고 변경 사항과 객체를 가져옵니다.
나중에 git merge를 사용 하여 병합 할 수 있습니다 .
편집 : 추가 설명
로부터 직선 Git- SVN 크래시 코스 링크
이제 원격 저장소에서 새로운 변경 사항을 어떻게 얻습니까? 당신은 그들을 가져옵니다 :
git fetch http://host.xz/path/to/repo.git/
이제 저장소에 있으며 다음을 사용하여 검사 할 수 있습니다.
git log origin
변경 사항을 비교할 수도 있습니다. git log HEAD..origin 을 사용 하여 지점에없는 변경 사항 만 볼 수도 있습니다 . 그런 다음 병합하려면 다음을 수행하십시오.
git merge origin
가져올 분기를 지정하지 않으면 기본적으로 추적 리모컨이 기본값으로 설정됩니다.
매뉴얼 페이지를 읽으면 옵션과 사용법을 가장 잘 이해할 수 있습니다.
나는 예제와 메모리 로이 작업을 시도하고 있는데 현재 테스트 할 상자가 없습니다. 다음을 봐야합니다.
git log -p //log with diff
git reset --hard ( link )를 사용 하여 가져 오기를 취소 할 수 있지만 가져온 변경 사항뿐만 아니라 트리에서 커밋되지 않은 모든 변경 사항이 손실됩니다.
git reset --soft
나 --mixed
? 맨 페이지를 확인하십시오.
원격 리포지토리에서 가져 와서 차이점을 확인한 다음 당기거나 병합 할 수 있습니다.
다음은 원격 리포지토리 origin
및 master
원격 분기 추적 이라는 브랜치의 예입니다 origin/master
.
git checkout master
git fetch
git diff origin/master
git pull --rebase origin master
나를 위해 사용자 지정 git 별칭을 만들었습니다.
alias.changes=!git log --name-status HEAD..
그것으로 당신은 이것을 할 수 있습니다 :
$git fetch
$git changes origin
이렇게하면을 수행하기 전에 변경 사항을 미리 볼 수있는 쉽고 좋은 방법이 merge
있습니다.
이 두 명령을 사용하면 파일을 변경할 수 있습니다.
먼저 git fetch를 실행 하면 다음과 같은 출력을 제공합니다 (출력의 일부).
... 72f8433..c8af041 개발-> 원산지 / 개발 ...
이 작업은 두 개의 커밋 ID를 제공합니다. 첫 번째는 이전 ID이고 두 번째는 새 ID입니다.
그런 다음 git diff를 사용 하여이 두 커밋을 비교하십시오.
git diff 72f8433..c8af041 | grep "diff --git"
이 명령은 업데이트 될 파일을 나열합니다.
diff --git a/app/controller/xxxx.php b/app/controller/xxxx.php
diff --git a/app/view/yyyy.php b/app/view/yyyy.php
예를 들어 app / controller / xxxx.php 및 app / view / yyyy.php 가 업데이트됩니다.
git diff를 사용하여 두 커밋을 비교하면 업데이트 된 모든 파일이 변경된 줄로 인쇄되지만 grep을 사용 하면 출력에서 diff --git 가 포함 된 줄만 검색하여 가져 옵니다 .
나는 파티에 늦을지도 모르지만 이것은 너무 오랫동안 나를 괴롭힌 것입니다. 내 경험상 작업 복사본을 업데이트하고 해당 변경 사항을 처리하는 것보다 보류중인 변경 사항을보고 싶습니다.
이것은 ~/.gitconfig
파일 에 들어갑니다 .
[alias]
diffpull=!git fetch && git diff HEAD..@{u}
현재 분기를 가져온 다음 작업 사본과이 가져온 분기간에 차이점을 수행합니다. 따라서 변경 사항 만 표시됩니다 git pull
.
HEAD..@{u}
있습니까? 더 간단하고 리모컨의 이름을 "origin"으로 지정하거나 분기의 이름을 리모컨과 동일하게 지정할 필요는 없습니다.
git pull
수행중인 작업이 마음에 들지 않으면 병합 부분을 중단 할 수 있어야합니다 . 그래서 유스 케이스가 무엇인지 잘 모르겠습니다.
git pull
나중에 그냥 할 수 있는지 . 또한 op의 질문이 무엇인지 생각합니다.
git-fetch 가 로컬 .git을 업데이트 하지 않으려면 로컬 리포지토리를 임시 디렉토리에 복사하고 가져옵니다. 여기 손이 있습니다 :
$ alias gtp="tar -c . | (cd /tmp && mkdir tp && cd tp && tar -x && git pull; rm -rf /tmp/tp)"
전의.:
$ git status
# On branch master
nothing to commit (working directory clean)
$ gtp
remote: Finding sources: 100% (25/25)
remote: Total 25 (delta 10), reused 25 (delta 10)
Unpacking objects: 100% (25/25), done.
From ssh://my.git.domain/reapO
32d61dc..05287d6 master -> origin/master
Updating 32d61dc..05287d6
Fast-forward
subdir/some.file | 2 +-
.../somepath/by.tes | 3 ++-
.../somepath/data | 11 +++++++++++
3 files changed, 14 insertions(+), 2 deletions(-)
$ git status
# On branch master
nothing to commit (working directory clean)
$ git fetch
remote: Finding sources: 100% (25/25)
remote: Total 25 (delta 10), reused 25 (delta 10)
Unpacking objects: 100% (25/25), done.
From ssh://my.git.domain/reapO
32d61dc..05287d6 master -> origin/master
$ git status
# On branch master
# Your branch is behind 'origin/master' by 3 commits, and can be fast-forwarded.
#
nothing to commit (working directory clean)
다른 곳에서 리포지토리를 복제하고 실제 체크 아웃과 새로운 클론 모두에서 git log를 수행하여 동일한 것을 얻었는지 확인하십시오.