git-merge --dry-run 옵션이 있나요?
충돌이 많을 수 있는 원격 지점에 병합 중입니다.충돌 여부를 어떻게 알 수 있습니까?
난 아무것도 안 보여--dry-run
git-merge
바와 같이 「 」에 합니다.--no-commit
커밋을 피하기 flag, fast-forward flag, fast-forward flag, fast-forward flag, fast-forward flag--no-ff
다음과 같이 합니다.
$ git merge --no-commit --no-ff $BRANCH
단계적 변경을 검토하려면:
$ git diff --cached
또한 머지가 고속 전송 머지인 경우에도 머지를 취소할 수 있습니다.
$ git merge --abort
저장소와 원격 간의 충돌을 자동으로 찾아내는 방법을 구현해야 했습니다.이 솔루션은 메모리에서 병합되므로 인덱스나 작업 트리에 닿지 않습니다.이것이 당신이 이 문제를 해결할 수 있는 가장 안전한 방법이라고 생각합니다.동작 방법은 다음과 같습니다.
- 이치노를 들면, '먹다'와 같이요.
git fetch origin master
- merge-base: git merge-base를 합니다.
git merge-base FETCH_HEAD master
- merge-tree git merge-tree 실행:
git merge-tree mergebase master FETCH_HEAD
(parambase는 이전 단계에서 merge-base로 출력된16진수 ID입니다).
리모트 마스터를 로컬마스터와 Marge 하는 경우, 임의의 브랜치를 사용할 수 있습니다. git merge-tree
는 메모리에서 머지를 실행하고 결과를 표준 출력으로 출력합니다.의 <<
★★★★★★★★★★★★★★★★★」>>
또는 출력을 파일로 인쇄하여 확인할 수 있습니다. '다 시작하는 거예요
합병을 시도하기 전에 얼마나 큰 문제를 겪고 있는지 알고 싶으시겠죠Marge 실패 후 마지막 커밋으로 리셋하는 것은 비교적 간단하기 때문에 의도된 접근법이라고 해도 놀라지 않을 것입니다.
즉, 작업 트리의 기존 파일을 건드리지 않으려면 패치를 생성하여 대상 브랜치에 대해 테스트할 수 있습니다.또한 어떤 파일이 변경되었는지 정확하게 표시할 수 있습니다. 텍스트 편집기에서 패치 파일을 열기만 하면 됩니다.
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
보시는 바와 같이 패치파일이 작성되고 --check로 테스트하여 오류가 없는지 확인한 후 패치파일을 삭제합니다.
수 있다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
이를 위한 간단한 강력한 솔루션은 다음과 같습니다.
마스터에서 "Pre-master" 브랜치를 만듭니다.
원하는 모든 항목을 이 프리마스터에 병합합니다.
그러면 마스터를 건드리지 않고도 병합이 어떻게 이루어졌는지 볼 수 있습니다.-
- 마스터 OR에 사전 마스터 병합
- 모든 출시 지사를 마스터로 병합
어쨌든 @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과의 Marge를 취소하는 것은 매우 간단하며, 드라이런에 대해서도 걱정할 필요가 없습니다.
$ git pull $REMOTE $BRANCH
# uh oh, that wasn't right
$ git reset --hard ORIG_HEAD
# all is right with the world
작업 스테이징 상기의 전에 그것들을 않은 는, 「」에 ).git reset
상기의경우)를 참조)
현재 브랜치를 리모트브런치와 달리하면 풀/머지 실행 시 무엇이 변경되는지 알 수 있습니다.
#see diff between current master and remote branch
git diff master origin/master
꼭 그렇지는 않아요.그러나 --no-commit 옵션을 사용하면 병합 후 결과가 자동으로 커밋되지 않습니다.이렇게 하면 커밋트리를 건드리지 않고 마지를 실행 취소할 수 있습니다.
아직 아무도 패치 사용을 제안하지 않았다니 놀랍네요.
를 들어 '을 하면요.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".
저보다 똑똑하거나 git에 경험이 많은 사람에게 주의하세요.제가 틀렸다면 알려주세요.이 방법은 일반 머지와는 다른 동작을 보여줍니다.8년 이상 이 질문이 존재해왔다는 것이 이상하게도 아무도 겉으로 보기에 명백한 해결책을 제안하지 않았다.
그러기 위해서는 request-pull git 명령을 사용합니다.이를 통해 로컬 또는 원격 저장소에서 아무 작업 없이 병합할 때 발생하는 모든 변경 사항을 볼 수 있습니다.
예를 들어, "feature-x"라는 이름의 브런치를 마스터 브런치에 Marge한다고 가정합니다.
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
--ff-only(오프만)
현재 HEAD가 이미 최신 상태이거나 Marge를 Fast Forward로 해결할 수 없는 경우를 제외하고 0이 아닌 상태로 병합 및 종료를 거부합니다.
이렇게 하면 Marge와 Fast Forward가 시도되고, 그렇지 않으면 Fast Forward를 수행할 수 없다는 메시지가 나타나지만 작업 중인 브랜치는 변경되지 않습니다.FastForward가 가능한 경우 동작 중인 브랜치로 Marge가 실행됩니다.이 옵션은 다음 날짜에도 사용할 수 있습니다.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
내 해결책은 거꾸로 병합하는 거야
리모트 「타깃」브런치에 브랜치를 Marge 하는 대신에, 그 브랜치를 자신의 브랜치에 Marge 합니다.
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/501407/is-there-a-git-merge-dry-run-option
'IT' 카테고리의 다른 글
링크 업데이트 경고를 억제하는 방법 (0) | 2023.04.13 |
---|---|
c#을 사용하여 SQL Server 테이블 변경을 감시하는 방법 (0) | 2023.04.13 |
OLE DB 공급자 'Microsoft.Jet.OLEDB.4.0'은 분산 쿼리에 사용할 수 없습니다. (0) | 2023.04.13 |
이전 커밋을 체크한 후 최신 커밋으로 돌아가려면 어떻게 해야 합니까? (0) | 2023.04.13 |
iOS 7의 기본 파란색을 프로그래밍 방식으로 가져오려면 어떻게 해야 합니다. (0) | 2023.04.13 |