programing

Git: 로컬 레포가 최신 상태인지 확인하는 방법은 무엇입니까?

batch 2023. 8. 14. 22:43
반응형

Git: 로컬 레포가 최신 상태인지 확인하는 방법은 무엇입니까?

저는 제 지역 보고서가 최신 상태인지 알고 싶습니다(만약 그렇지 않다면, 이상적으로는 변경 사항을 보고 싶습니다).

하지 않고 어떻게 이것을 확인할 수 있습니까?git fetch또는git pull?

해라git fetch --dry-run설명서(git help fetch)는 다음과 같이 말합니다.

--dry-run
Show what would be done, without making any changes.

최초 사용git remote update원격 참조를 최신 상태로 전환할 수 있습니다.그런 다음 다음과 같은 여러 가지 작업 중 하나를 수행할 수 있습니다.

  1. git status -uno추적 중인 분기가 앞에 있는지, 뒤에 있는지 또는 분기되었는지 여부를 알려줍니다.아무것도 표시되지 않으면 로컬과 원격이 동일합니다.샘플 결과:

지점 DEV

분기는 '오리진/DEV'보다 7 커밋 뒤에 있으며, 빠르게 전달될 수 있습니다.

("git pull"을 사용하여 로컬 지점을 업데이트합니다.)

  1. git show-branch *master이름이 'master'로 끝나는 모든 분기의 커밋을 표시합니다(예: 마스터 및 오리진/마스터).

사용하는 경우-vgit 원격 업데이트 포함(git remote -v update업데이트된 분기를 확인할 수 있으므로 추가 명령이 필요하지 않습니다.

git remote show origin

결과:

HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (local out of date) <-------

사용할 수 있습니다.git remote update; git status -uno로컬 분기가 오리진 분기와 최신 상태인지 확인합니다.

그렇지는 않아요 - 하지만 어떻게 하는지 모르겠어요.git fetch당신의 지역 지점을 바꾸지 않기 때문에 아플 것입니다.

두 가지 명령을 실행해야 합니다.

  1. git fetch origin
  2. git 상태

실행해야 합니다.git fetch로컬 리포지토리를 원격 서버의 파일과 비교하기 전에 확인할 수 있습니다.

이 명령은 원격 추적 분기만 업데이트하고 사용자가 호출할 때까지 작업 트리에 영향을 미치지 않습니다.git merge또는git pull.

일단 가져온 로컬 지점과 원격 추적 지점의 차이를 보려면 여기에 설명된 대로 git difforgit cherry를 사용할 수 있습니다.

다른 방법은 다음을 사용하여 원격 지점의 상태를 보는 것입니다.git show-branch remote/branch그것을 당신이 볼 수 있는 비교로 사용하기 위해.git show-branch *branch저장소뿐만 아니라 모든 원격에서 지점을 확인하려면 이 답변을 확인하십시오. 자세한 내용은 https://stackoverflow.com/a/3278427/2711378 을 참조하십시오. https://stackoverflow.com/a/3278427/2711378

git remote show origin


Enter passphrase for key ....ssh/id_rsa:
* remote origin
  Fetch URL: git@github.com:mamaque/systems.git
  Push  URL: git@github.com:mamaque/systems.git 

  HEAD branch: main
  Remote branch:
    main tracked
   Local ref configured for 'git push':

main pushes to main (up-to-date) 둘 다 최신 상태입니다.
main pushes to main (fast-forwardable) 원격은 로컬로 업데이트할 수 있습니다.
main pushes to main (local out of date) 로컬은 원격으로 업데이트할 수 있습니다.

사용하는 경우

git fetch --dry-run -v <link/to/remote/git/repo>

최신 상태인지 여부에 대한 피드백을 받을 수 있습니다.따라서 기본적으로 앞에서 제시한 답변에 "개요" 옵션을 추가하면 됩니다.

git fetch origin
git status

다음과 같은 결과를 보게 될 것입니다.

지점이 '출발지/마스터'보다 9개 커밋 뒤에 있습니다.

원격 변경 사항에 업데이트

git pull
 

사용하지 않고는 불가능합니다.git fetch또는git pull원격 저장소로 이동하여 "최신"이 의미하는 바를 확인하지 않고 저장소가 "최신"인지 여부를 어떻게 알 수 있습니까?

를 사용하지 이 하는 방법은 다음과 같습니다.git fetch은 수있다니습사를 할 수 .git rev-list명령을 사용하여 로컬 분기에 대한 가장 최근의 커밋과 해당 원격 분기에 대한 가장 최근의 커밋을 비교합니다.다음은 이를 수행하는 Bash 스크립트입니다.

#!/bin/sh

# Get the name of the current branch
branch=$(git rev-parse --abbrev-ref HEAD)

# Get the hash of the most recent commit on the local branch
local_commit=$(git rev-list --max-count=1 $branch)

# Get the hash of the most recent commit on the corresponding remote branch
remote_commit=$(git rev-list --max-count=1 origin/$branch)

# Count the number of commits between the local and remote branches
commits_behind=$(git rev-list --count $local_commit..$remote_commit)

# Print the result
echo "The local branch is $commits_behind commits behind the corresponding remote branch."

이스립먼현분재이가름져다니옵을을 사용하여 분기의 .git rev-parse --abbrev-ref HEAD그런 다음 사용합니다.git rev-list --max-count=1로컬 및 원격 분기 모두에서 가장 최근의 커밋 해시를 가져옵니다.마지막으로, 그것은 사용합니다.git rev-list --count두 해시 간의 커밋 수를 계산합니다. 이는 로컬 분기가 원격 분기 뒤에 있는 커밋 수입니다.

는 해당 이 " " " " " 인 으로 가정합니다.origin/branch_name리모컨의 이름이 다른 경우 스크립트를 적절하게 조정해야 합니다.

언급URL : https://stackoverflow.com/questions/7938723/git-how-to-check-if-a-local-repo-is-up-to-date

반응형