programing

gitstash 실수: gitstash pop과 합병 충돌로 끝났습니다.

starjava 2023. 7. 16. 12:25
반응형

gitstash 실수: gitstash pop과 합병 충돌로 끝났습니다.

나는 했습니다.git stash pop병합 충돌이 발생했습니다.▁a,고,git checkout아래와 같이 파일이 병합되지 않은 것으로 생각됩니다.그런 다음 파일을 교체하고 다음 작업을 시도했습니다.git checkout다시 그리고 같은 결과.저는 그것을 강제로 시도하기도 했습니다.-f깃발입니다. 어떤 도움이라도 주시면 감사하겠습니다!

chirag-patels-macbook-pro:haloror patelc75$ git status
app/views/layouts/_choose_patient.html.erb: needs merge
app/views/layouts/_links.html.erb: needs merge
# On branch prod-temp
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   db/schema.rb
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       unmerged:   app/views/layouts/_choose_patient.html.erb
#       unmerged:   app/views/layouts/_links.html.erb

chirag-patels-macbook-pro:haloror patelc75$ git checkout app/views/layouts/_choose_patient.html.erb
error: path 'app/views/layouts/_choose_patient.html.erb' is unmerged
chirag-patels-macbook-pro:haloror patelc75$ git checkout -f app/views/layouts/_choose_patient.html.erb
warning: path 'app/views/layouts/_choose_patient.html.erb' is unmerged

관리 병합(충돌 해결 방법)을 참조하십시오.

충돌을 확인한 후에는 다음 두 가지 작업을 수행할 수 있습니다.

  • 병합하지 않기로 결정합니다.정리만 하면 인덱스 파일을 HEAD 커밋으로 재설정하여 2.와 3.에서 변경한 작업 트리를 정리합니다. git-reset --hard를 사용할 수 있습니다.

  • 충돌을 해결합니다.Git는 작업 트리의 충돌을 표시합니다.파일을 모양으로 편집하고 인덱스에 추가합니다.git commit을 사용하여 거래를 성사시킵니다.

TRUE MERGE(2.와 3.이 무엇을 의미하는지 확인하려면)에서 다음을 수행합니다.

변경 사항을 조정하는 방법이 명확하지 않으면 다음과 같은 일이 발생합니다.

  1. HEAD 포인터는 그대로 유지됩니다.

  2. MERGE_HEAD 참조는 다른 분기 헤드를 가리키도록 설정됩니다.

  3. 새로 병합된 경로는 인덱스 파일과 작업 트리에서 모두 업데이트됩니다.

  4. ...

소: 사를 합니다.git reset --hard " " " "라는 이름의 파일을 사용합니다.git reset인덱스를 정리하고 작업 트리의 충돌을 손으로 병합하도록 하려면 이 옵션을 선택합니다.

관리 상태(OPTIONS, 팝업)에서 추가로 다음을 읽을 수 있습니다.

상태를 적용하면 충돌이 발생하여 실패할 수 있습니다. 이 경우에는 상태가 스택 목록에서 제거되지 않습니다.충돌을 수동으로 해결하고 이후 수동으로 gitstash drop을 호출해야 합니다.

저도 비슷한 일이 있었어요.을 스테이징하고 로 추가했습니다.git add에 그고방했습다니금리▁did다▁and니했습▁then▁just.git reset기본적으로 변경 내용을 추가한 다음 스테이징을 해제했지만 병합되지 않은 경로는 지웠습니다.

의 내용을 저장된 " 나럼일으로작디내저내파의덮일해다충니발합충결사다을경돌여하용을음처우는하생이돌서면쓰어용으로반적의장된용"를 사용하여 충돌을 해결하는 것이 좋습니다."를 사용하여 하는 것이 .git checkout --theirs -- .근본부터

그 후에, 당신은 할 수 있습니다.git reset충돌이 발생할 경우 비반복 파일에 대한 변경사항이 인덱스에 남아 있으므로 인덱스에서 작업 디렉터리로 모든 변경사항을 가져옵니다.

또한 실행할 수도 있습니다.git stash drop [<stash name>]나중에, 재고를 없애기 위해서, 왜냐하면.git stash pop충돌이 발생할 경우 삭제하지 않습니다.

Git 2.5 (2015년 2분기) 미래의 Git는 그 시나리오를 불가능하게 만들 수 있습니다.

Jeff King178ef 참조 (peff), 2015년 4월 22일.
(주니오 C 하마노와 합병)gitster커밋 05c3967, 2015년 5월 19일)

참고: 이 값은 반환되었습니다. 아래를 참조하십시오.

stash적용/팝업에 깨끗한 인덱스가 필요합니다.

문제

색인에 내용을 준비하고 실행한 경우 "stash apply/pop충돌이 발생하여 새로운 항목을 색인에 추가할 수 있습니다.
이 시점에서 "git reset --keep"과 같은 도구는 준비된 모든 것을 날려버리기 때문에 원래 상태로 복구하는 것은 어렵습니다.

즉, 다음과 같습니다.

"git stash pop/apply작업 트리뿐만 아니라 인덱스도 깨끗한지 확인하는 것을 잊었습니다.
후자는 스택 응용프로그램이 충돌할 수 있고 충돌 해결에 인덱스가 사용될 수 있기 때문에 중요합니다.

해결책

단계별 변경사항이 있을 때 적용을 거부함으로써 이를 더 안전하게 만들 수 있습니다.

즉, 이전에 수정된 파일(추가되었지만 커밋되지 않음)에 대한 스택을 적용했기 때문에 병합이 발생한 경우에는 다음과 같이 즉시 적용/팝업이 중지되므로 병합이 되지 않습니다.

Cannot apply stash: Your index contains uncommitted changes.

변경사항을 커밋하도록 강제하는 것은 병합의 경우 초기 상태(이전)를 쉽게 복원할 수 있음을 의미합니다.git stash apply/pop)와 함께git reset --hard.


커밋 1937610(2015년 6월 15일)을 참조하고, 제프 킹()에 의해 178ef(peff2015년 4월 22일)를 커밋했습니다.
(Junio C Hamano에 의해 합병됨 -- -- 2015년 6월 24일 commit bfb539b에서)

응용 프로그램 프로세스가 충돌하는 인덱스 항목을 생성할 수 있으므로 원래 인덱스 상태를 복원하기 어렵기 때문에 이 커밋은 스택 적용의 안전성을 향상시키기 위한 시도였습니다.

불행히도, 이는 "주변의 일반적인 워크플로우에 피해를 줍니다.git stash -k예:

git add -p       ;# (1) stage set of proposed changes
git stash -k     ;# (2) get rid of everything else
make test        ;# (3) make sure proposal is reasonable
git stash apply  ;# (4) restore original working tree

(3) 단계와 (4) 단계 사이에 "기트 커밋"을 수행하면 이 작업이 수행됩니다.그러나 이러한 단계가 사전 커밋 후크의 일부인 경우에는 해당 기회가 없습니다(테스트의 통과 여부와 관계없이 원래 상태를 복원해야 합니다).

git restore --staged  name-of-file-that-has--merge-conflict

언급URL : https://stackoverflow.com/questions/2840816/git-stash-blunder-git-stash-pop-and-ended-up-with-merge-conflicts

반응형