2017-12-21 27 views
0

나는 master 브랜치를 잡아 당겼다. 로컬 마스터에서 나는 여러 커밋을했다. 이제 마지막 커밋 (이전 커밋이 아닌) 만 푸시합니다. 이것을 어떻게 성취합니까?우리가 리스터 팅하는 동안 커밋을 더 높이거나 낮추어야 하는가?

나는 그것을하는 방법에 대한 좋은 설명을 발견 : How to push only one commit with Git. 더 "추상적"형태로,

git push origin 2dc2b7e393e6b712ef103eaac81050b9693395a4:master 

을 또는 : 그래서, 명령이이 같은해야 내가 이해로까지, 그러나

git push <remote name> <commit hash>:<remote branch name> 

, 일반적인 경우, 을 것이다은 하나의 커밋 (해당 해시에 의해 주어진)을 푸시하지 않습니다. 대신 지정된 커밋과 지정된 커밋 이전에 완료된 모든 커밋을 푸시합니다.

따라서 하나의 단일 커밋 만 수행하려면 우선 커밋 순서를 변경해야합니다. 즉, 밀어 넣으려는 커밋이 가장 오래된 커밋 (커밋 시퀀스의 첫 번째 커밋) . 방법은 여기에서 설명합니다 : How to reorder commits with Git. 이 설명은 명확하다, 나를 혼란 유일한 것은이 구절이다 : 내 경우

, 나는 불어 넣고 싶었 내 난 단지 밀어 수 있도록 내가 바닥에 내려 프로젝트 파일을 고정 곳 커밋 가장 상단 그 중 하나는 원격 서버에 커밋합니다.

그러나 우리가 일종의 반대를하고 싶지 않은 경우는 아닙니까? "맨 아래로"커밋을 가져 오면 마지막 (가장 최근) 커밋으로 간주되며 푸시 할 때 해시를 사용하면 그 전에 오는 모든 것을 푸시합니다 ("모든 커밋"을 의미 함). .

우리가하고자하는 것은 git rebase -i HEAD~5을 실행할 때 우리가 보는 파일에 커밋을 올려 놓는 것입니다. 내가 맞습니까?

답변

1

것은 하나만 분기 bbarcfoo을 커밋 밀어하려는 경우, 여기에 간단한 해결책 : 실제 경우

git fetch origin bbar 
git checkout FETCH_HEAD 
git cherry-pick cfoo 
git push origin HEAD:bbar 

, 당신은 git stash을 실행하거나 백업에 다른 일을 할 필요가 있습니다 해결 방법.

"higher"의 경우, 예, git rebase -i 뒤에 나타나는 텍스트 편집기에서 첫 번째 줄이 가장 오래된 커밋입니다. 하나의 커밋 만 푸시하고 싶으면 첫 번째 줄에 넣으십시오.

+0

그러나 내가 밀어 넣은 저장소에서 끌어 오지 않으면 어떻게 될까요? – Roman

+0

내 접근 방식에 문제가 있습니까? – Roman

+0

@Roman 그건 중요하지 않습니다. 'git push' 또는'git pull' ('git fetch' 포함)을 실행할 때 원격 저장소의 URL을 동적으로 지정할 수 있습니다. 'git push HEAD : ','git pull '여기서'branchA'와'branchB'는 같은 이름을 가질 수 있습니다. 'urlA'와'urlB'가 일정한 경우, 하나 또는 두 개의 리모트로 추가 할 수 있습니다. 하나의 리모컨에는 두 개의 값이 있습니다. 하나는 푸시 용이고 다른 하나는 페치 용입니다. – ElpieKay