2017-03-31 2 views
0

나는 가능한 답변을 모두 살펴 봤으며 블로그도 읽었지만 꽤 나쁘다고 엉망이라고 생각합니다. 첫 번째 줄 이후 squashpick을 변경 한 후끌어 오기 요청을 연 후에 커밋을 스쿼시하는 방법은 무엇입니까?

git rebase -i upstream/master

와,하지만 난 또 다시 병합 충돌을 얻고 있었다 -

나는 시도했다. 그래서 결국 나는이 권장 SO에 대한 답변 읽기 -
#!/bin/bash 

if [ $# -ne 1 ]; then 
    echo "Missing parameter: number of commits to squash." 
    exit 1 
fi 

echo "Squashing $1 commits..." 
git reset --soft HEAD~$1 
git log --format=%B%n --reverse "[email protected]{1}" -n $1 > _msg.txt 
git commit -t _msg.txt 
rm _msg.txt 
echo "Done!" 

그래서 내가 git-squash 6 시도를하고 나는이 어렵게 엉망 생각합니다. 더 자세한 정보가 필요하면 그냥 물어보십시오.

을 heres PR - I 상류 저장소로 시작

https://github.com/mushorg/glutton/pull/62

enter image description here

+0

Github에는 sqashing 옵션이 있습니다. –

+0

@ TusharKotlapure이 옵션은 저장소의 소유자 만 사용할 수 있습니다. – hashcode55

답변

1

:

$ git clone https://github.com/mushorg/glutton 
$ cd glutton 

그냥 만들어 내 원격 이름은 당신과 같이 :

$ git remote rename origin upstream 
이미 로컬 변경 사항이 있기 때문에

$ git fetch upstream pull/62/head 
$ git checkout FETCH_HEAD 

당신은 분명,이 단계가 필요하지 않을 :

그럼 난 당신의 PR를 가져옵니다.

$ git log --oneline master.. 
cdbca37 Merge branch 'master' of https://github.com/HashCode55/glutton 
b37aafd SMTP responses fixed and random wait time added 
f25198e supports random wait time for response 
4cfcc1d random removed 
f2bfed7 refactor 
da3dbdb refactor 
3bfb62c removed rand function 
1bb8a43 SMTP responses fixed 
088f6df merged 
a383e09 Revert "Revert "removed"" 
f1bb1c2 Revert "removed" 
97bac3f removed 
97a0408 Changes 

몇 가지 밖으로 뛰어 :

  • 하는 당신은 아마 더 일을 찾을 수

    그냥 내가 당신이 같은 일을 찾고 있어요 확인하기 위해, 나는 다음과 같이 변경 참조 자신의 master 지점이 아닌 지사 지점에서 작업하는 경우 관리가 용이합니다. 즉, 변경하기 전에 git checkout -b my-spiffy-feature으로 시작하십시오. 업스트림에 정기적으로 참여하게된다면 master 브랜치가 어떤 시점에서 업스트림 master 브랜치의 상태를 항상 반영하면 가장 편리합니다. 로컬 마스터 브랜치를 간단하게 git pull upstream master으로 업데이트 할 수 있기 때문입니다.

  • 기능 분기에 코드 병합을 피하십시오. 업스트림 변경 사항을 통합해야하는 경우 정기적으로 upstream/master에 rebase하십시오.
  • 지사 지점에서 되돌리기 커밋을 생성하지 마십시오. 그냥 git reset을 사용하십시오.

위의 단계를 수행했다면이 점에서 모든 갈등과 복잡성을 피할 수 있습니다.

아마도 상류 master 지점에 다시 현재 분기를 재설정하여 시작되는 모든 변경 스쿼시하는 가장 쉬운 방법 :이 저장소를 재설정합니다

$ git reset upstream/master 

하지만 하지 작업 디렉토리에 upstream/master 분기의 상태. 작업 디렉토리의 상태를 수정하지 않기 때문에 모든 변경 사항은 유지되지만 커밋 기록은 보존되지 않습니다. 이 시점에서, 우리는 다음을 참조하십시오

$ git status 
[...] 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: app/server.go 
    modified: smtp.go 

no changes added to commit (use "git add" and/or "git commit -a") 

이제 우리는 새로운 커밋을 만들 수 있습니다
$ git add -u 
$ git commit 

는 이제 하나의 상류 master 지점의 상부에 커밋합니다. 그런 다음 자신의 master 브랜치에 강제로 푸시하면 PR이 업데이트됩니다.

(NB : 변경 사항을 잃어 버리거나 그와 같은 것을 잃어 버릴 까봐 걱정되는 경우 새 분기에서 작업하거나 작업 디렉토리의 로컬 복사본을 만들어 대신 작업하십시오.)

+0

정말 도움이되었습니다. 그러나 나는 아직도 뭔가를 놓치고있다. 내 자식 상태에서 그것은 말한다 -'당신의 지점은 13 커밋에 의해 'origin/master'뒤에 있으며, 빨리 감기 될 수있다. (로컬 브랜치를 업데이트하려면 "git pull"을 사용하십시오)'출력과 함께. – hashcode55

+0

로컬 리포지토리에서 origin은 * your github 저장소 ('HashCode55/glutton')를 가리키고 있으며, 사실 repo에 대한 내역을 잘라 냈습니다 ('git reset '때문에) 그래서 괜찮아. 당신은'upstream/master'의 머리 부분에 있어야하고,'git log'을 실행하면 현재의'upstream/master' 브랜치 위에 변경 사항이있는 커밋이 있음을 확인해야합니다. – larsks

+0

나는 내가 말하고있는 오류의 스크린 샷으로 질문을 업데이트했다. – hashcode55

관련 문제