Git를 사용하여 로컬과 원격 간의 변경 사항을 찾는 방법
여기 두 가지 다른 질문이 있지만 관련이 있다고 생각합니다.
Git를 사용할 때 로컬에서 커밋했지만 아직 원격 지점으로 푸시하지 않은 변경 사항을 어떻게 찾을 수 있습니까?와 비슷한 것을 찾고 있습니다.
hg outgoing
.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 pull
hg 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 마스터 오리진/마스터
git log origin을 사용합니다.HEAD"
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
'programing' 카테고리의 다른 글
SQL의 두 비트 마스크를 비교하여 일치하는 비트가 있는지 확인 (0) | 2023.09.01 |
---|---|
점선 테두리 스트로크 길이 및 스트로크 간 거리 제어 (0) | 2023.09.01 |
SQL의 인벤토리 평균 비용 계산 (0) | 2023.09.01 |
-fno-stack-protector의 용도는 무엇입니까? (0) | 2023.09.01 |
새 DB가 훨씬 느림 (0) | 2023.09.01 |