programing

Git를 사용하여 로컬과 원격 간의 변경 사항을 찾는 방법

megabox 2023. 9. 1. 20:43
반응형

Git를 사용하여 로컬과 원격 간의 변경 사항을 찾는 방법

여기 두 가지 다른 질문이 있지만 관련이 있다고 생각합니다.

  1. Git를 사용할 때 로컬에서 커밋했지만 아직 원격 지점으로 푸시하지 않은 변경 사항을 어떻게 찾을 수 있습니까?와 비슷한 것을 찾고 있습니다.hg outgoing.

  2. Git를 사용할 때 풀을 수행하기 전에 원격 지점에 어떤 변경 사항이 있는지 어떻게 알 수 있습니까?와 비슷한 것을 찾고 있습니다.hg incoming.

두 번째로, 사용 가능한 항목을 확인한 후 원하는 변경 사항을 선택할 수 있는 방법이 있습니까?

1브랜치를 할 수 . Git 1.7.0 부스일분반참로으있다습니조구문이수수특.@{u}또는@{upstream}.

hg incoming:

git log ..@{u}

hg outgoing:

git log @{u}..

과 같은 다을사니다를 합니다.incoming그리고.outgoing위의 항목을 쉽게 사용할 수 있습니다.

git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'

Git은 HG처럼 네트워크를 통해 그런 종류의 정보를 전송할 수 없습니다.하지만 넌 도망칠 수 있어,git fetch(어느 쪽이 더 좋습니까?hg pullhg fetch원격 서버에서 새 커밋을 가져옵니다.

그래서, 만약 당신이 그 지점을master 라고 리모콘는라는 .origin달기를한후에를 실행한 git fetch당신은 또한라는 지점이 있어야 합니다.origin/master그러면 다음을 얻을 수 있습니다.git log master의 상 집 어합니다야의 .origin/master를 으로써.git log master..origin/master반대로 하려면 이 두 가지를 반전시키세요.

제 친구인 데이비드 달러는 시뮬레이션을 위해 몇 개의 깃셸 스크립트를 만들었습니다.hg incoming/outgoing그것들은 http://github.com/ddollar/git-utils 에서 찾을 수 있습니다.

전체 응답은 아니지만 gitfetch는 원격 repo를 풀하고 병합을 수행하지 않습니다.그러면 다음을 수행할 수 있습니다.

gitdiff 마스터 오리진/마스터

  1. git log origin을 사용합니다.HEAD"

  2. git fetch 다음에 "git log HEAD...origin"을 사용합니다.나열된 커밋 ID를 사용하여 개별 커밋을 선택할 수 있습니다.

위에서는 물론 "오리진"이 원격 추적 지점의 이름이라고 가정합니다(기본 옵션과 함께 복제를 사용한 경우).

모든 분기를 비교하기 위한 다음과 같은 기능도 있습니다.

git log --branches --not --remotes=origin

Git log man 페이지에는 다음과 같은 내용이 있습니다.

로컬 분기에는 있지만 오리진에 대한 원격 추적 분기에는 없는 모든 커밋을 표시합니다(그 오리진에는 없는 커밋).

의 것은 위의것을 입니다.outgoing.위해서incoming그냥 스왑:

git log --remotes=origin --not --branches

그럴게요

$ git fetch --dry-run

위해서hg incoming그리고.

$ git push --dry-run

위해서hg outgoing.

Git-out은 에뮬레이트하는 스크립트입니다.hg outgoing아주 정확하게push -n 출력을 구문 분석하므로 push할 추가 인수를 지정해야 할 경우 정확한 출력을 생성합니다.

곧 도착할 것 같은

$ git fetch && git log ..origin/master --stat
OR
$ git fetch && git log ..origin/master --patch

사교적인

$ git fetch && git log origin/master.. --stat
OR
$ git fetch && git log origin/master.. --patch

처음에 "git log" 및 @{u} 응답에서 "unknown revision" 오류가 발생했을 때 Chris/romkyns 제안을 사용해 보았습니다.git push --dry-run.

"5905.."와 같은 출력이 표시됩니다.4878 master->master." 5905는 리모트가 가지고 있는 최신 커밋이며 4878을 통해 커밋됩니다.

그런 다음 5905를 사용할 수 있습니다.4878은 더 자세한 정보를 얻기 위한 몇 가지 다른 git 명령의 인수로 사용됩니다.

git diff 5905..4878 # Gives full code changes in diff style

git log --online 5905..4878 # Displays each commit's comment

다음과 같은 방법으로 모든 분기에 걸쳐 수신되는 커밋을 표시할 수 있습니다.

명령어git fetch-diff라는 실행 파일을 추가하여 사용할 수 있습니다.git-fetch-diff다음을 포함하는 경로:

#!/bin/bash

set -e

# get hashes before fetch
old_hashes=$(git log --all --no-color --pretty=format:"%H")

# perform the fetch
git fetch

# get hashes after fetch
new_hashes=$(git log --all --no-color --pretty=format:"%H")

# get the difference
added_hashes=$(comm -1 -3 <(echo "$old_hashes") <(echo "$new_hashes"))

# print added hashes
[ ! -z "$added_hashes" ] && echo "$added_hashes" | git log --stdin --no-walk --oneline

커밋 해시는 가져오기 전과 후에 비교됩니다.그 차이는 다시 에 연결됩니다.git log인쇄가 잘 되도록다음과 같은 인수를 사용하여 인쇄된 로그의 모양을 사용자의 기호에 맞게 조정할 수 있습니다.--pretty=<format>그리고.--graph.

참고: 최대 한도를 설정할 수 있습니다.git log시스템에서 bash 변수가 보유할 수 있는 양 또는 성능상의 이유에 따라 시간을 되돌립니다.이 작업은 인수를 추가하여 수행할 수 있습니다.--max-count=<count>.

git fetch를 수행할 때 branch, tag(refs)를 포함한 모든 콘텐츠가 .git/FETCH_HEAD에 임시로 저장됩니다. git log FETCH_HEAD 명령으로 콘텐츠를 볼 수 있습니다. git fetch와 함께 접미사 -a를 사용하지 않으면 기본적으로 FETCH_HEAD의 콘텐츠는 새 콘텐츠에 의해 덮어쓰게 됩니다.이러한 콘텐츠에서 병합할 분기를 보고 결정할 수 있으며, 가져오기를 통해 가져온 항목에서 몇 개의 커밋만 원하는 경우 간단히 체리픽을 선택할 수 있습니다.

언급URL : https://stackoverflow.com/questions/231211/using-git-how-do-i-find-changes-between-local-and-remote

반응형