programing

깃풀 미리보기 방법?

abcjava 2023. 7. 15. 00:29
반응형

깃풀 미리보기 방법?

그게 가능할까요?

기본적으로 다음을 사용하여 원격 저장소를 끌어옵니다.

git pull

이제, 저는 제 옆에 있는 어떤 것도 만지지 않고 이 당김이 무엇을 변화시킬지 미리 보고 싶습니다.그 이유는 제가 끄는 것이 "좋지" 않을 수도 있고 제 저장소를 "더럽게" 만들기 전에 다른 사람이 고쳐주길 원하기 때문입니다.

를 한 에.git fetch을 보다git log HEAD..origin/master마지막 공통 커밋과 오리진의 마스터 분기 사이의 로그 항목을 표시합니다.차이를 표시하려면 다음 중 하나를 사용합니다.git log -p HEAD..origin/master패치를 하거나 각패를표거나시하치▁each▁to나,▁show거.git diff HEAD...origin/master(두 개가 아닌 세 개의 점) 하나의 차이를 나타냅니다.

일반적으로 가져오기를 실행하면 원격 분기만 업데이트되고 분기는 업데이트되지 않으므로 가져오기를 실행 취소할 필요가 없습니다.모든 원격 커밋에서 끌어오기 및 병합할 준비가 되어 있지 않은 경우git cherry-pick원하는 특정 원격 커밋만 수락합니다.여러분이을 얻을 , 나에중모, 이것을얻든준되면을비가,git pull나머지 커밋에서 병합됩니다.

업데이트: 저는 당신이 왜 git fetch의 사용을 피하고 싶은지 완전히 확신할 수 없습니다.Git fetch가 수행하는 모든 작업은 원격 분기의 로컬 복사본을 업데이트하는 것입니다.이 로컬 복사본은 분기와 관련이 없으며 커밋되지 않은 로컬 변경과도 관련이 없습니다.크론 작업이 매우 안전하기 때문에 git fetch를 실행하는 사람들에 대해 들어본 적이 있습니다. (하지만 일반적으로 그렇게 하는 것을 권장하지는 않습니다.)

당신이 찾고 있는 것은 git fetch라고 생각합니다.

변경사항 및 개체를 로컬 담당자의 인덱스에 커밋하지 않고 끌어옵니다.

나중에 git merge와 병합할 수 있습니다.

맨 페이지

편집: 추가 설명

Git-SVN Crash Course 링크에서 바로 이동

원격 저장소에서 새로운 변경 사항을 얻는 방법은 무엇입니까?가져오면 됩니다.

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)를 사용하여 가져오기를 취소할 수 있지만 트리에서 커밋되지 않은 모든 변경사항과 가져온 변경사항이 손실됩니다.

원격 저장소에서 가져와 차이점을 확인한 다음 풀 또는 병합할 수 있습니다.

은 ""라는 입니다.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.

제가 파티에 늦을지도 모르지만, 이것은 저를 너무 오랫동안 괴롭힌 것입니다.제 경험상 작업 복사본을 업데이트하고 변경 사항을 처리하기보다는 보류 중인 변경 사항을 확인하고 싶습니다.

이것은 다음에 들어갑니다.~/.gitconfig파일 이름:

[alias]
    diffpull = !git fetch && git diff HEAD..@{u}

현재 분기를 가져온 다음 작업 복사본과 가져온 분기 간에 차이를 만듭니다.따라서 다음과 같은 변경 사항만 확인해야 합니다.git pull.

이 두 가지 명령을 사용하여 변경할 파일을 볼 수 있습니다.

  1. 먼저 git fetch를 실행하면 다음과 같은 출력이 제공됩니다(출력의 일부).

    ...72f8433..c8af041 개발 -> 원산지/개발...

이 작업은 두 개의 커밋 ID를 제공합니다. 첫 번째는 이전 ID이고 두 번째는 새 ID입니다.

  1. 그런 다음 gitdiff를 사용하여 이 두 커밋을 비교합니다.

    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가 업데이트됩니다.

gitdiff를 사용하여 두 커밋을 비교하면 업데이트된 모든 파일이 변경된 행으로 인쇄되지만 grepit을 사용하여 검색하고 출력에서 diff --git을 포함하는 행만 가져옵니다.

아래의 유용한 명령어는 https://gist.github.com/jtdp/5443297 링크에서 선택했습니다.https://gist.github.com/jtdp 덕분입니다.

git fetch origin

# show commit logs of changes
git log master..origin/master

# show diffs of changes
git diff master..origin/master

# apply the changes by merge..
git merge origin/master

# .. or just pull the changes
git pull

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)

13년 후, 당신은 이제 ""git maintenance(man)에서 과제를 가지고 있습니다.

프리페치 작업은 등록된 모든 원격에서 개체 디렉토리를 최신 개체로 업데이트합니다.

각 원격에 대해, agit fetch명령이 실행됩니다.
refmap은 로컬 또는 원격 지점(에 있는 지점)을 업데이트하지 않도록 사용자 지정됩니다.refs/heads또는refs/remotes).
대신 원격 참조가 에 저장됩니다.
또한 태그는 업데이트되지 않습니다.

작업은 원격 추적 분기의 중단을 방지하기 위해 수행됩니다.
최종 사용자는 가져오기를 시작하지 않는 한 이러한 참조가 그대로 유지될 것으로 예상합니다.

그러나 프리페치 작업을 사용하면 나중에 실제 페치를 완료하는 데 필요한 개체를 이미 얻을 수 있으므로 실제 페치가 더 빨리 진행됩니다.
이상적인 경우에는 객체 전송 없이 원격 추적 분기의 한 묶음에 대한 업데이트가 있습니다.

그리고 Git 2.32 (2021년 2분기) 이후로 할 수 있습니다.git fetch --prefetch마지막 가져오기 상태를 수정하지 않고 다시 시작합니다.

커밋 32f6788, 커밋 cfd781e, 커밋 2e031115(2021년 4월 16일), 커밋 a039a1f(2021년 4월 6일)를 데릭 스톨리()에 derrickstolee의해 커밋합니다.
(주니오 C 하마노에 의해 합병 -- -- 2021년 4월 30일 250f90 약속)

fetch덧셈--prefetch선택

지원자:톰 사거
도움을 받은 사람: 램지 존스
사인 오프 바이: 데릭 스톨리

--prefetch옵션은 명령줄을 통해 refspec을 명시적으로 전송하는 대신 'sysetch' 유지 관리 작업에서 사용됩니다.
모든 결과를 다음에 배치하도록 refspec을 수정하는 것이 목적입니다.refs/prefetch/다른 곳 대신에.

메소드 filter_prefetch_refspec()프리페치 작업에 예상되는 규칙에 맞게 지정된 refspec을 수정합니다.

  • 음의 기준 사양이 보존됩니다.
  • 대상이 없는 참조 규격이 제거됩니다.
  • 가 " 스가로 "로refs/tags/제거됩니다.
  • 은 "refspec" " 안배니다됩치다은에른 안에 됩니다.refs/prefetch/".

마지막으로 '를 추가합니다.force필요에 따라 프리페치 기준을 교체할 수 있습니다.

시험해 볼 가치가 있는 몇 가지 흥미로운 사례들이 있습니다.

변경의 에서는 " 변경사항버이서는에전이전의"가되었습니다.i--루프에서 refspec 항목을 삭제하고 나머지 항목을 아래로 이동합니다.
이를 통해 일부 refspec을 수정할 수 없습니다.
첫 번째 부분에 대한 미묘한 부분.--prefetch테스트는 다음과 같습니다.refs/tags/*. refspec은 refs/heads/refus/* refspec입니다.
"그것없이는"는" 는.i--를 지정하면 은주를 " 것문제니다 "가 됩니다.refs/tags/*하고 마지막 하지 않은 로 "refspec 지고마에하수나정않하지결채"에결과를 합니다.refs/heads/*".

refspec은 수 .
일반적으로 오리진 이외의 원격에서는 특정 태그 또는 분기를 가져올 수 있습니다.
이 경우를 올바르게 테스트하려면 로컬 분기에 대한 업스트림 리모컨을 추가로 제거해야 합니다.
따라서, 우리는 삭제될 refspec을 테스트하고 있으며, 가져올 것은 아무것도 없습니다.

fetch-options이제 관리 페이지에 다음 항목이 포함됩니다.

--prefetch

하여 모든 를 refspec의 합니다.refs/prefetch/네임스페이스입니다.

다른 곳에서 레포를 복제하고 실제 체크아웃과 신규 클론에 대해 git log를 수행하여 동일한 내용을 얻었는지 확인해 보는 것은 어떨까요?

언급URL : https://stackoverflow.com/questions/180272/how-to-preview-git-pull

반응형