Git-Merge --dry-run 옵션이 있습니까?
충돌이 많을 수 있는 원격 지점에서 병합합니다.충돌 여부는 어떻게 알 수 있습니까?
나는 아무것도 보지 못합니다.--dry-run
git-merge
.
앞서 언급한 바와 같이 다음을 전달합니다.--no-commit
플래그, 그러나 빠르게 전달되는 커밋을 피하기 위해 전달하기도 합니다.--no-ff
예:
$ git merge --no-commit --no-ff $BRANCH
스테이징된 변경 사항 검사하기
$ git diff --cached
그리고 빠른 전달 병합인 경우에도 병합을 실행 취소할 수 있습니다.
$ git merge --abort
저장소와 원격 간의 충돌을 자동으로 찾는 방법을 구현해야 했습니다.이 솔루션은 메모리에서 병합되므로 인덱스나 작업 트리에 닿지 않습니다.저는 이것이 당신이 이 문제를 해결할 수 있는 가장 안전한 방법이라고 생각합니다.작동 방식은 다음과 같습니다.
- 원격을 저장소로 가져옵니다. 예:
git fetch origin master
- 런깃병기준:
git merge-base FETCH_HEAD master
- 룽기트 룽기트:
git merge-tree mergebase master FETCH_HEAD
(mergebase는 이전 단계에서 merge-base가 인쇄된 16진수 ID입니다.)
이제 원격 마스터를 로컬 마스터와 병합하려고 하지만 모든 분기를 사용할 수 있다고 가정합니다. git merge-tree
메모리에서 병합을 실행하고 결과를 표준 출력으로 인쇄합니다. 에한대 턴패 Grep<<
또는>>
또는 출력물을 파일로 인쇄하여 확인할 수 있습니다.'changed both'로 둘 다 ' in both' 시작발 잖아요.
합병을 시도하기 전에 얼마나 많은 문제를 겪고 있는지 알고 싶으실 거예요그리고 병합 실패 후 마지막 커밋으로 재설정하는 것은 비교적 쉬우므로 의도된 접근 방식이라고 해도 놀라지 않을 것입니다.
즉, 작업 트리의 기존 파일을 건드리지 않으려면 패치를 생성하여 대상 분기에 대해 테스트할 수 있습니다.이 기능은 또한 어떤 파일이 변경되었는지 정확히 보여주는 이점이 있습니다. 즉, 텍스트 편집기에서 패치 파일을 열기만 하면 됩니다.
git checkout -b mycrazybranch
[change some stuff...]
git add .
git commit -m "changed some stuff"
git format-patch master --stdout > crazy.patch
git checkout master
git apply crazy.patch --check
[all good! cleanup...]
rm crazy.patch
이렇게 하면 패치 파일이 생성되고 --로 테스트하여 오류가 있는지 확인한 다음 패치 파일을 제거할 수 있습니다.
할수있습니다git merge --abort
충돌이 있는 것을 본 후에.
기존 답변의 요약으로서 병합 충돌 여부를 확인하는 두 가지 방법이 있습니다.
git format-patch $(git merge-base branch1 branch2)..branch2 --stdout | git apply --3way --check -
현재 지점은 다음과 같아야 합니다.branch1
의 명령을 과 같습니다.
다른 방법:
git merge --no-commit branch2
# check the return code here
git merge --abort
이에 대한 간단한 브루트 포스 솔루션은 다음과 같습니다.
(물론 마스터에서) "사전 마스터" 분기 작성
이 사전 마스터에 원하는 모든 항목을 병합합니다.
그러면 마스터를 누르지 않고 병합이 어떻게 이루어졌는지 알 수 있습니다.-
- 사전 마스터를 마스터 또는 마스터에 대한 병합
- 릴리스할 모든 분기를 마스터로 병합
어쨌든, 저는 @orange80의 조언을 따를 것입니다.
저는 이것을 하기 위해 가명을 만들었고 매력적으로 일했습니다. 저는 이렇게 합니다.
git config --global alias.mergetest '!f(){ git merge --no-commit --no-ff "$1"; git merge --abort; echo "Merge aborted"; };f '
이제 전화할게요
git mergetest <branchname>
충돌 여부를 확인하기 위해섭니다.
git와의 병합을 취소하는 것은 너무 쉬워서 모의 실행에 대해 걱정할 필요도 없습니다.
$ git pull $REMOTE $BRANCH
# uh oh, that wasn't right
$ git reset --hard ORIG_HEAD
# all is right with the world
EDIT알 수 , 사항이 위입니다. 에 삭제됩니다.git reset
아래)
현재 분기를 원격 분기와 비교하면 풀/병합을 수행할 때 변경되는 내용을 알 수 있습니다.
#see diff between current master and remote branch
git diff master origin/master
아직 아무도 패치 사용을 제안하지 않았다는 것이 놀랍습니다.
병을테고싶합니다다고에서 을 테스트하고 your_branch
안으로master
(당신이 가지고 있다고 생각합니다.master
체크아웃됨):
$ git diff master your_branch > your_branch.patch
$ git apply --check your_branch.patch
$ rm your_branch.patch
그것이 효과가 있어야 해요.
다음과 같은 오류가 발생하는 경우
error: patch failed: test.txt:1
error: test.txt: patch does not apply
즉, 패치가 성공하지 못했으며 병합하면 충돌이 발생합니다.출력이 없음은 패치가 깨끗하며 분기를 쉽게 병합할 수 있음을 의미합니다.
이렇게 해도 실제로 작업 트리가 변경되지는 않습니다(물론 패치 파일을 만드는 것 외에 나중에 안전하게 삭제할 수도 있습니다).git-apply 설명서에서 다음을 수행합니다.
--check
Instead of applying the patch, see if the patch is applicable to the
current working tree and/or the index file and detects errors. Turns
off "apply".
나보다 더 똑똑하거나 기트에 경험이 많은 사람에게 주의하십시오. 만약 내가 여기서 틀리고 이 방법이 일반적인 합병과는 다른 행동을 보인다면 알려주십시오.이 질문이 존재했던 8년 이상 동안 아무도 이 명백한 해결책을 제안하지 않는 것은 이상해 보입니다.
정확히는 그렇지 않습니다.그러나 병합 후 결과가 자동으로 커밋되지 않도록 --no-commit 옵션을 사용할 수 있습니다.이러한 방식으로 커밋 트리를 조작하지 않고 병합을 검사하고 필요한 경우 실행 취소할 수 있습니다.
이를 위해 request-pull git 명령을 사용합니다.로컬 또는 원격 리포지토리에서 아무것도 수행하지 않고 병합 시 발생하는 모든 변경 사항을 확인할 수 있습니다.
예를 들어 "feature-x"라는 분기를 마스터 분기로 병합하려고 합니다.
git request-pull master origin feature-x
에서는 (아무 작업도 하지 않고) 어떤 일이 발생하는지 요약하여 보여 줍니다.
The following changes since commit fc01dde318:
Layout updates (2015-06-25 11:00:47 +0200)
are available in the git repository at:
http://fakeurl.com/myrepo.git/ feature-x
for you to fetch changes up to 841d3b41ad:
----------------------------------------------------------------
john (2):
Adding some layout
Refactoring
ioserver.js | 8 +++---
package.json | 7 +++++-
server.js | 4 +--
layout/ldkdsd.js | 277 +++++++++++++++++++++++++++++++++++++
4 files changed, 289 insertions(+), 7 deletions(-)
create mode 100644 layout/ldkdsd.js
추가할 경우-p
매개 변수, 모든 변경된 파일에 대해 Git diff를 수행한 경우와 마찬가지로 전체 패치 텍스트도 얻을 수 있습니다.
Git는 병합할 때 --ff-only 옵션을 도입했습니다.
보낸 사람: http://git-scm.com/docs/git-merge
--off-only
현재 HEAD가 이미 최신 상태이거나 병합을 빠른 전달로 확인할 수 없는 경우 0이 아닌 상태로 병합 및 종료를 거부합니다.
이렇게 하면 병합 및 빨리 감기가 시도되고, 병합할 수 없는 경우에는 중단되고 빨리 감기를 수행할 수 없다는 메시지가 표시되지만 작업 분기는 그대로 유지됩니다.빠르게 전달할 수 있는 경우 작업 분기에서 병합을 수행합니다.이 옵션은 다음에서 사용할 수도 있습니다.git pull
따라서 다음을 수행할 수 있습니다.
git pull --ff-only origin branchA #See if you can pull down and merge branchA
git merge --ff-only branchA branchB #See if you can merge branchA into branchB
이것은 흥미로울 수 있습니다.설명서에서 다음을 참조하십시오.
병합을 시도하여 복잡한 충돌이 발생한 경우 다시 시작하려면 git merge --abort를 사용하여 복구할 수 있습니다.
하지만 순진한(하지만 느린) 방식으로 할 수도 있습니다.
rm -Rf /tmp/repository
cp -r repository /tmp/
cd /tmp/repository
git merge ...
...if successful, do the real merge. :)
(참고: /tmp로 복제하는 것만으로는 작동하지 않습니다. 커밋되지 않은 변경 사항이 충돌하지 않도록 하려면 복사본이 필요합니다.)
Git 로그를 사용하여 마스터 분기에서 피쳐 분기의 변경 내용을 확인
git log does_this_branch..contain_this_branch_changes
예: 마스터에 병합되었거나 병합되지 않은 피쳐 분기에 있는 커밋을 확인합니다.
git log master..feature_branch
제 해결책은 거꾸로 합쳐지는 것입니다.
분기를 원격 "대상" 분기로 병합하는 대신 해당 분기를 사용자의 분기로 병합합니다.
git checkout my-branch
git merge origin/target-branch
충돌이 있는지 확인하고 해결 방법을 계획할 수 있습니다.
그런 다음 git를 통해 병합을 중단할 수 있습니다.merge --abort
또는 (충돌이 없고 병합이 발생한 경우) 이전 커밋으로 롤백합니다.git reset --hard HEAD~1
충돌만 보고 싶습니다. (으로 볼 수 없습니다.)diff3
아직 GitHub에 있음).위의 답변을 크게 활용하여 다음과 같이 생각해 냈습니다.
git merge --no-commit --no-ff @{upstream}
git grep -l '<<<<<<< HEAD' | xargs -I % sh -c "echo -e '\n\e[93m%\n---\e[0m' && cat %"
git merge --abort
저는 PR을 확인하기 위한 것입니다.대체할 수 있습니다.@{upstream}
어떤 가지든 간에
그게 누군가에게 도움이 되길 바랍니다.
B에서 A로 빠르게 전달하려면 Git 로그 B를 확인해야 합니다.A은(는) 아무것도 보여주지 않습니다.A는 B가 가지고 있지 않은 것이 없습니다.하지만 B가..A에는 여전히 충돌 없이 병합할 수 있는 것이 있습니다. 따라서 위의 두 가지 사항이 표시됩니다. 즉, 빨리 감기가 발생하므로 충돌이 발생하지 않습니다.
이것이 이론적으로는 주제에서 벗어난다는 것을 알지만, 실제로 구글 검색에서 여기에 도착하는 사람들에게는 매우 주제가 있습니다.
의심스러운 경우 Github 인터페이스를 사용하여 항상 풀 요청을 생성하고 정리 병합이 가능한지 여부를 확인할 수 있습니다.
작업 복사본의 임시 복사본을 만든 다음 이 복사본에 병합하여 둘을 구분합니다.
언급URL : https://stackoverflow.com/questions/6335717/can-git-tell-me-if-a-merge-will-conflict-without-actually-merging
'IT' 카테고리의 다른 글
판다는 보기와 복사본을 생성하기 위해 어떤 규칙을 사용합니까? (0) | 2023.06.22 |
---|---|
T-SQL 표에서 두 번째 행만 선택하는 방법은 무엇입니까? (0) | 2023.06.22 |
특정 경로를 제공하는 http 서버를 어떻게 실행합니까? (0) | 2023.06.22 |
Google Font API 키는 어디에서 찾을 수 있습니까? (Newbie) (0) | 2023.06.22 |
sql server 2005에서 데이터 손실 없이 테이블의 "스키마"를 변경하려면 어떻게 해야 합니까? (0) | 2023.06.22 |