2014-09-28 2 views
0

오픈 소스 라이브러리의 GitHub 포크가 있습니다. 해당 포크의 내 로컬 복사본에 포함 된 CMakeLists.txt (및 다른 파일)의 많은 부분을 수정하여 전체 라이브러리를 컴파일하지 않도록했습니다 (필요하지 않은 것들이 많이 있기 때문에). 따라서, 부드럽게 내 변화를 통합하기 위해 내가당기거나 가져올 때 로컬로 수정 된 파일을 다루는 방법은 무엇입니까?

git update-index --assume-unchanged <files> 

을 그래서 내가 그 파일을 변경하지 않은 것처럼 나에게 자식을 사용할 수 있습니다. 그러나, 원격 변경이 있고 내가 그들을 끌어하려고 할 때마다 (또는 내가 새로운 지점을 생성 할 때마다), 나는 다음과 같은 오류 얻을 :

error: Your local changes to the following files would be overwritten by merge: 
    CMakeLists.txt 
    demos/CMakeLists.txt 
    <other files> 
Please, commit your changes or stash them before you can merge. 
Aborting 

그래서 내가 수동으로 모든 변경 사항을 취소해야하고, git update-index --no-assume-unchanged <files>을 다시 당기고 다시 실행하면 다시 변경되며 update-index입니다. 거의 매일해야하기 때문에 이것은 고통 스럽습니다.

내가 원하는 것은 변경된 사항이 있으면 로컬로 수정 한 파일을 업데이트하는 것입니다 (실제로 변경 될 가능성이 없으므로 충돌 가능성은 낮습니다).하지만 변경 사항을 유지하고 git을 유지해야합니다. 그들은 변화하지 않았다고 가정합니다.

더 좋은 방법이 있나요?

편집 : 죄송합니다. 이미 문의하신 경우 죄송합니다. 나는 그것을 찾고 있었지만 나는 나의 특정한 경우에 대한 응답을 찾을 수 없었다. 고맙습니다!

답변

0

나는이 질문에 명확하게 답변 할 것이기 때문에 나는 스스로에게 대답하고있다.

먼저, 나는 커밋을하고 싶지 않은 모든 변경을 수행했습니다.이 커밋이 SHA1이라고 가정 해 봅시다. 그런 다음 나머지 변경을 수행하고 SHA2를 사용하여 커밋했습니다.

내 레포는 다음과 같습니다. master <- SHA1 <- SHA2 SHA1을 밀지 않고 SHA2를 밀어야합니다.내가`git push origin SHA2 : master를 사용한다면, SHA2는 커밋 됨과 동시에 SHA2도 커밋됩니다.

그러나 git rebase -i을 수행하면 다음 보여줍니다

pick SHA2 comment2 pick SHA1 comment1

이제 SHA2 더 이상 SHA1에 따라 달라집니다

pick SHA1 comment1 pick SHA2 comment2

그래서 나는 그 커밋의 순서를 변경했습니다. git push origin SHA2:master을 수행하면 SHA2의 변경 사항 만 푸시됩니다.

마지막으로 업스트림에서 일부 변경 사항이 발생하면 git pull을 실행하면 원활하게 작동합니다.

1

사용하기 위해 필요한이 정말 애매한 명령이 - git commit가) 심각하게

, 그냥 작업을 커밋하고 풀 + 물건을 돌볼/리베이스 병합 할 수 있습니다.

당신이 앞서이

상류 <처럼 상류의 커밋이 상상 - CMakeLists.txt

git reset HEAD~1로 변경 - - 당신이 <을 밀어 원하는 작동 "uncommit"커밋 가장 최근에, 그래서 첫 번째 커밋을 추진할 수 있습니다.

번갈아

git push HEAD~1:UPSTREAM는 - 같은 작업을 수행하지만 일이 최선을 다하고 떠날 것이다.

아니면 git branch PUSH_ME HEAD~1하고 말할 수 여기에 옵션의 끝이 없습니다 git push PUSH_ME:UPSTREAM

. 작업을 수행하는 동안 변경 사항을 커밋해야만 일을 올바르게 풀링/병합 할 수 있습니다.

+0

내 질문을 이해하지 못한다고 생각합니다. 오류가있는 파일은 --assume-unchanged이므로 커밋하고 싶지 않습니다. –

+0

맞아, 정상적으로 "추가"하고 커밋합니다. Git의 모든 목적을 상쇄하는 작업 디렉토리에만 변경 사항을 저장하고 싶지는 않습니다. –

+0

정상적으로 커밋하고 update-index와 그 내용을 잊어 버리시겠습니까? 그럼 풀 요청을 원한다면 어떨까요? 나는 모든 변화를 제거해야 할 것이다. –

0

파일이 저장소에 포함되지 않은 경우 --assume-unchanged 대신에 .gitignore에 파일을 포함해야합니다. 그럴까요?

+0

그런 경우는 아닙니다. 요점은 예제 5 데모 용으로 컴파일 된 CMakeLists.txt가 있고 나머지는 관련이 없으므로 그 중 하나만 컴파일하려고한다는 것입니다. 그런 다음 CMakeLists.txt의 해당 줄을 주석으로 처리하고, 변경하지 않고, 작업을 수행하고, 커밋하고, 푸시하고, 요청을 가져옵니다. CMakeLists.txt의 변경 사항은 변경되지 않으므로 커밋되지 않습니다. 하지만 지금은 리모컨에서 로컬 복사본을 업데이트하는 동안 변경 사항을 유지하려고합니다 (수정하는 파일은 일반적으로 수정되지 않으므로). –

관련 문제