git : 최신 버전의 코드를 어떻게 얻습니까?


200

Git 1.7.4.1을 사용하고 있습니다. 저장소에서 최신 버전의 코드를 가져오고 싶지만 오류가 발생합니다 ...

$ git pull
….
M   selenium/ant/build.properties
….
M   selenium/scripts/linux/get_latest_updates.sh
M   selenium/scripts/windows/start-selenium.bat
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'.

도구가 불평하는 파일의 로컬 사본을 삭제했지만 여전히 오류가 발생합니다. 원격 저장소에서 최신 버전을 확인하려면 어떻게합니까? -데이브


1
아래 @Kzqai의 답변이 도움이되었습니다 git fetch. 먼저 먼저 해보십시오 . 충돌이 없었지만 최신 버전의 코드를 얻는 방법입니다.
Chris K

답변:


258

로컬 변경 사항 (여기서 추적되지 않거나 생성 된 파일 또는 하위 리포지토리 포함)을 신경 쓰지 않고 리포지토리에서 사본을 원할 경우 :

git reset --hard HEAD
git clean -xffd
git pull

다시 말하지만, 이것은 로컬에서 변경 한 내용을 없애기 때문에 신중하게 사용하십시오. rm -Rf이것을 할 때 생각하십시오 .


1
이 명령을 시도했는데 여전히 "CONFLICT (콘텐츠) : 충돌 충돌 : 셀레늄 /ant/build.xml"(다른 것들 중에서) 오류가 발생했습니다. 리포지토리의 파일로 최신 버전의 파일을 덮어 쓰고 싶습니다. 어떡해??
Dave

31
git clean -f실제로 답변의 일부가 아닙니다. 리포지토리에 보관되지 않은 파일 (예 : 내 경우에는 로그 파일)을 삭제합니다. git pull다시 작업 하기 위해이 작업 을 수행 할 필요는 없습니다 git reset --hard HEAD.
대런 쿡

12
Esh, man, 초보자를 git하기 위해 몇 가지 삭제 명령 중 하나를 권장하지 않습니다.
Kzqai

6
@DarrenCook 리포지토리를 실제로 정리하려면 git clean -f이것이 중요 하다고 생각 합니다. TFS에서 "폴더에서 모두 삭제-> 최신 버전 가져 오기 / 특정 항목 가져 오기"를 수행하는 것과 같습니다. 필자의 경우 이것이 내가 원하는 것입니다.
RPDeshaies

3
@Darren git clean -f``도 중요하다고 생각합니다. 최신 버전을 원하고 쓸모없는 캐시 항목 또는 저장소에없는 다른 생성 된 리소스를 유지하고 싶지 않습니다. 대답은 로컬 변경 사항을 제거하고 저장소에서 마지막 버전을 모방한다는 사실에 대해 분명합니다. 업데이트 사이에 로그 파일을 유지해야하는 경우 로그 파일을 다른 위치로 옮길 것입니다.
Balmipour

231

사례 1 : 지역 변경에 신경 쓰지 마십시오

  • 해결 방법 1 : 최신 코드를 가져와 코드 재설정

    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
    
  • 해결 방법 2 : 폴더를 삭제하고 다시 복제하십시오 : D

    rm -rf [project_folder]
    git clone [remote_repo]
    

사례 2 : 지역 변화에 대한 관심

  • 해결 방법 1 : 새로운 온라인 버전과 충돌하지 않습니다

    git fetch origin
    git status
    

    다음과 같은 내용을보고합니다.

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
    

    그런 다음 최신 버전을 얻으십시오

    git pull
    
  • 해결 방법 2 : 새로운 온라인 버전과 충돌

    git fetch origin
    git status
    

    다음과 같은 내용을보고합니다.

    error: Your local changes to the following files would be overwritten by merge:
        file_name
    Please, commit your changes or stash them before you can merge.
    Aborting
    

    지역 변경 사항 커밋

    git add .
    git commit -m ‘Commit msg’
    

    변경을 시도하십시오 (실패)

    git pull
    

    다음과 같은 내용을보고합니다.

    Pull is not possible because you have unmerged files.
    Please, fix them up in the work tree, and then use 'git add/rm <file>'
    as appropriate to mark resolution, or use 'git commit -a'.
    

    충돌 파일을 열고 충돌을 수정하십시오. 그때:

    git add .
    git commit -m ‘Fix conflicts’
    git pull
    

    다음과 같은 내용을보고합니다.

    Already up-to-date.
    

추가 정보 : 'git reset --hard HEAD'를 사용하여 이전 커밋으로 되돌리려면 어떻게합니까?


@tvl. 코드를 커밋하지 않고 최신 업데이트를받을 수있는 방법 (충돌이 있음). 도와주세요
user3354457

@ user3354457 xm, 흥미로운 질문입니다. 나는 전에이 시도 적이 있지만 그것은 및 보고서 등을 시도 할 수 있습니다, 그래서) : - 변화와 패치를 확인 : 자식은 diff> 미트되지 않은-changes.patch - 분기를 재설정 - 변경 사항을 당겨 - 패치를 적용
TVL

3
이 답변은 답변으로 승인 된 것보다 훨씬 더 많은 투표를 받아야합니다.
James

@James :) 내 대답이 도움이되어 기쁩니다. 팁 : 주제에 대해 전혀 모르는 것처럼 문서를 작성해보십시오.
tvl

4
git fetch에 대한 가장 완벽한 답변. 이 게시물은 잠겨 있어야합니다
Callat

17

변경 사항에 신경 쓰지 않았기 때문에 수정 한 파일을 삭제 했으므로 git이 삭제를 변경으로 생각하고 있습니다.

다음은 변경 사항을 작업 복사본에서 "스 태쉬"로 옮기는 방법입니다 (실제로 다시 필요한 것으로 밝혀지면 검색 가능). 그러면 최신 변경 사항을 업스트림에서 끌어 올 수 있습니다.

git stash  
git pull

파일을 검색하려면 (업스트림 변경과의 충돌 가능성 등) a git stash apply를 실행하여 해당 변경 사항을 코드 위에 적용하십시오. 이렇게하면 "실행 취소"접근 방식이 있습니다.


1
git stash popgit stashes의 역사를 원하지 않는 한 사용하는 것이 좋습니다
Rapnar

7

먼저 파일을 병합해야합니다. 를 수행합니다 git status(먼저 충돌을 해결하는 데 필요한 수단)을 병합하는 데 필요한 파일이 무엇인지 확인합니다. 이 작업이 완료되면 다시 git add file_merged수행 pull하십시오.


2
감사. 나는이 문제에 직면했다. 커밋하지 않으려는 작업 파일에 약간의 변경 사항이 있습니다. 그러나이 경우에는 git pull을 수행 할 수 없습니다. 그래서 git stash, git pull --rebase, git stash pop을 수행합니다. 그런 다음 수동으로 병합하고 git add file_merged
RuntimeException

6

이 코드를 사용해보십시오

cd /go/to/path
git pull origin master

5
Stackoverflow에 오신 것을 환영합니다! 문제를 해결하는 방법을 더 잘 설명하기 위해 솔루션에 설명을 추가하십시오. 답이 더욱 유용 해집니다
dkackman

2

작업 폴더의 모든 것을 버리고 (예 : 병합 실패 또는 중단 된 결과) 이전 커밋으로 되돌리려면을 수행하십시오 git reset --hard.


1

지역 변경 사항을 휴지통에 버리고 리모컨에있는 항목을 풀고 싶다는 것을 알고 있습니까?

다른 모든 방법이 실패하고 "리셋"에 대해 무서워하는 경우 가장 간단한 방법은 원본을 새 디렉토리에 복제하고 이전 디렉토리를 휴지통에 버리는 것입니다.


1

이 명령을 실행하면 일반적으로 프로젝트 버전 인 최신 태그를 얻을 수 있습니다.

git describe --abbrev=0 --tags

0

core.autocrlf 문제가있는 것처럼 들립니다. core.autocrlf = true는 CRLF 줄 바꿈이 저장소에 체크인 된 경우 Windows에서 설명하는 것과 같은 문제를 일으킬 수 있습니다. 리포지토리에 대해 core.autocrlf를 비활성화하고 하드 리셋을 수행하십시오.


0

Git GUI를 사용하는 경우 먼저 가져 와서 병합하십시오.

원격 메뉴 >> 가져 오기 >> 원점을 통해 가져 오기. 병합 메뉴 >> 로컬 병합을 통해 병합하십시오.

다음과 같은 대화 상자가 나타납니다.

여기에 이미지 설명을 입력하십시오

추적 지점 단일 선택 단추 (기본적으로 선택됨)를 선택하고 노란색 상자를 비워두고 병합을 누르면 파일이 업데이트됩니다.

어쨌든 무시하기를 원했기 때문에이 단계를 수행하기 전에 이미 일부 로컬 변경 사항을 되돌 렸으므로 나중에 병합을 통해 제거 할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.