2017-05-04 1 views
0

현재 두 개의 다른 분기에 내 소프트웨어의 두 가지 버전이 있습니다. 하나의 버전에는 중대한 변경 사항이 있습니다 (일부 폴더 이름 변경, 일부 파일 이름 변경, 많은 파일 제거).힘내 - 두 개의 개별 폴더에서 두 개의 개별 분기로 작업하고 문제없이 공통 근원으로 푸는 방법

저는 두 가지 버전 모두에서 작업 할 수 있기를 바랍니다. 마스터에서 버그 수정을하고, 원점으로 밀어 넣고, 다른 브랜치에 병합 할 수도 있습니다.

방금이 작업을 시도했지만 조금 혼란스러워했습니다. 나는 주인에게 버그 수정을하고 그것을 밀었다. 마스터를 다른 브랜치 폴더로 가져 왔습니다. 이것은 또한 합병하는 것처럼 보였다. 나는 결과를 밀어 냈다.

이제 마스터 폴더에서 다른 변경 작업을 수행하고 모든 브랜치를 푸시하려고하면 다른 브랜치와 관련하여 "업데이트 된 브랜치가 원격 상대방 뒤에 있기 때문에 업데이트가 거부되었습니다."라는 불만이 나타납니다.

그런 다음 다른 브랜치를 내 마스터 폴더로 가져 오려고했지만 그 작업이 끔찍한 병합을 만들었고 잘못된 분기가 발생했습니다. 나는 그것으로부터 회복했다고 생각하지만, 나는 여전히 나의 마스터 폴더에서 푸시 할 수 없다.

물론 TortoiseGit으로 작업하는 올바른 방법을 오해하고 있습니다. 어떻게 진행해야하는지 조언 해 줄 수 있습니까? git branch -vv

in master folder: 
    CodeFirst    3b4d37b [origin/CodeFirst] Show 25 entries in DataTables if the screen is big enough. 
    CodeFirstWebFramework be03722 Added DocumentMemo to report fields. 
    SilverstreamMerge  778b791 default.js merge 
* master    6c1254c [origin/master] Prevent Download button appearing twice in reports. 

in branch (CodeFirstWebFramework) folder 
* CodeFirstWebFramework 08b9117 Merge branch 'master' of //router/var/svn/AccountServer into CodeFirstWebFramework 
    master    b7994b3 [origin/master: behind 2] Validate Schedule.RepeatFrequency 

in origin (upstream repo on another machine) 
    CodeFirst    3b4d37b Show 25 entries in DataTables if the screen is big enough. 
    CodeFirstWebFramework 08b9117 Merge branch 'master' of //router/var/svn/AccountServer into CodeFirstWebFramework 
    SilverstreamMerge  778b791 default.js merge 
* master    6c1254c Prevent Download button appearing twice in reports. 

결과 나는 지역의 repo에 상류의 repo에서 모든 지점의 모든 버전을 복사 할 pull 명령을 기대 (잘못)라고 생각. 이것을하기위한 명령이 있습니까?

+0

저장소에서'git branch -vv'를 실행하고 결과를 붙여 넣을 수 있습니까? –

+0

마스터를 어떤 방식 으로든 손상시키는 측면에서 마스터를 지사 브랜치에 병합 할 때 문제가 발생하지 않아야합니다. 따라서 마스터 브랜치를 묘사하는 방식이 정상적으로 작동해야합니다. 당신이 생각한 일이 중요하지 않다고 생각했기 때문에, 당신이 그 일을했음을 기억하지 못하거나 적어도 여기에 언급하지 않고 실제로 더 큰 결과를 가져 왔고 현재 당신이있는 곳으로 당신을 데려갔습니다. 밀리지 마라. –

+0

'git log origin/master..master'와'git log master..origin/master'를 실행 해 보았습니다. 당신이 적용하지 않은 것을 보았습니까? –

답변

2

소리가 난다. 로컬에서 두 개의 브랜치를 유지하는 것이 더 "명백한"방법이며, 반드시 잘못되지는 않지만 두 개의 로컬 브랜치 세트가 있음을 의미합니다.

그런 경우라면 git work-tree을 옵션으로 사용할 수 있습니다. 이렇게하면 두 번째 작업 트리를 단일 로컬 저장소에 추가 할 수 있으므로 저장소의 다른 측면 (예 : 참조 목록)을 복제하지 않고도 각 트리를 다른 분기로 체크 아웃 할 수 있습니다. 이렇게하면 모든 것을 동기화 상태로 유지하는 것이 더 간단해질 수 있습니다.

귀하의 상황에서 일어난 일은 ... 내게는 명백하지 않습니다. 당신이 사용한 정확한 명령을 아는 것이 도움이 될 수 있습니다. 일반적으로 나는 그 오류 메시지와 함께 push이 실패 할 때 pull이 도움이 될 수도 있다고 말하거나 (이유를 알지 못하고 걱정할 경우 이유는 fetch) 로컬 및 원격 참조 간의 차이점을 검사 할 수 있습니다. 각 지점에 대해).

1

"cherry pick"이라는 Git 메소드가 있습니다. 분기에 커밋이있는 경우 다른 분기에서이 커밋을 적용 할 수 있습니다. 이것을 사용해보십시오. 그러나 커밋에 이름이 바뀌었기 때문에 존재하지 않는 파일이 포함 된 경우이 방법은 작동하지 않을 것이라고 생각합니다. (그리고 나는 작동 할 수있는 해결책이 없다고 생각합니다.)

커밋을 적용 할 지점으로 전환하고 TortoiseGit에서 저장소의 로그를 엽니 다 (TortoiseGit 컨텍스트 메뉴에서 로그 표시). 왼쪽 상단 모서리에서 커밋을 적용한 모든 분기 또는 분기를 선택합니다. 커밋을 찾아 마우스 오른쪽 버튼으로 클릭하고이 커밋을 선택합니다. 하나는 master에 체크 아웃 한 some_branch 체크 아웃 - 밀어 :) 잊지 마세요 성공하면 당신은 REPO의 두 클론을 가지고있는 것처럼 enter image description here

+0

고마워요, 나는 체리 선택을 알고 있습니다. 그러나 볼 수있는 한, 그것은 내가 원하는 것을하지 않습니다. 나는 보통 프로세스의이 부분에 rebase를 사용한다. 하지만 내 문제는 내 마스터 폴더를 원격지로 푸시 할 수있는 상태로 만드는 방법입니다. 소스 파일을 변경하지 않고 리모컨의 자식 정보로 마스터 폴더의 다른 분기를 어떻게 든 업데이트하려고합니다. 폴더를 만들거나 병합 또는 리베이스를 수행하십시오. –