SourceTree에서 병합 및 리베이스 수행

7898 단어 SourceTreeGitHubGit
SourceTree에서 Git을 조작할 때 GUI상에서 「어라, 어느 것을 선택 상태로 해, 어느 쪽을 오른쪽 클릭해 병합하는 것일까??」등과 조작에 당황하는 일이 조금 있습니다. . 커맨드로 하면 좋겠다고 이야기입니다만, 터미널에 익숙하지 않은 사람이 GUI로 하고 싶다고 하는 요구도 있는 것 같아,,.

그래서 병합과 리베이스에 대해 명령에 대응하는 SourceTree의 오퍼를 정리해 둡니다.

develop "에" feature/dev_#60 "을" 병합한다



피처 브랜치로 작업하고, 작업이 끝났으므로 develop에 병합하려고 시간의 연산. 특히 develop에서
# git merge --no-ff feature/dev_#60

이 연산입니다

이 상태를,


이 상태로 만드는 것이 목표입니다.


아, 덧붙여서, develop에의 병합을 풀 리퀘스트로 실시하는 개발 스타일의 경우는, 물론 커멘드나 SourceTree가 아니고, GitHub상에서 풀릭을 발행해 주세요. .

우선 이 커밋된 환경을 정비



이 테스트를 수행하기 위한 환경을 만듭니다.

Git 리포지토리 초기화
mkdir sample && cd $_
git init

Calc.java/Calc2.java를 만들고 master 브랜치로 커밋합니다. 그 후 필요한 브랜치를 작성합니다.
echo "hello" >> Calc.java
echo "hello" >> Calc2.java
git add Calc.java && git add Calc2.java   && git commit -m 'initial'
git checkout -b develop && git checkout -b feature/dev_#50 && git checkout -b feature/dev_#60

feature/dev_#60 및 feature/dev_#50에서 각각 수정하여 커밋
git checkout feature/dev_#60
echo "hello from feature/dev_#60" >> Calc.java
git commit -a -m '消費税対応1.05倍 #60 2016/12/26'

git checkout feature/dev_#50
echo "hello from feature/dev_#50" >> Calc2.java
git commit -a -m '消費税対応1.08倍 #50 2016/12/26'

git checkout develop

SourceTree를 통해 보면,



처음 캡처와 동일합니다. . .
여러 번 다시 시도하면,
rm -fr .git
rm *.java

하지 않았던 것으로 해, git init 로부터 다시 하면 OK입니다.

그럼 해보자.

명령으로


$ git branch
* develop
  feature/dev_#50
  feature/dev_#60
  master
$ git merge --no-ff feature/dev_#60
Already up to date!
Merge made by the 'recursive' strategy.
$ git branch
* develop
  feature/dev_#50
  feature/dev_#60
  master
$
$ git log --oneline --graph
*   2be95c9 (HEAD -> develop) Merge branch 'feature/dev_#60' into develop
|\
| * 72bafd1 (feature/dev_#60) 消費税対応1.05倍 #60 2016/12/26
|/
* 0ad8ea7 (master) initial
$

feature/dev_#60 브랜치를 develop 브랜치에 병합할 수 있습니다.

SourceTree에서 보면 이런 느낌.


SourceTree에서



그런데 본제의 SourceTree에서의 오퍼입니다.
develop을 두 번 클릭하여 체크 아웃하고 (굵게 표시) dev_#60을 마우스 오른쪽 단추로 클릭하고 dev_#60을 develop으로 병합을 선택합니다.


Fast Forward가 되어 버렸습니다만, 우선 병합은 생긴 것 같습니다.


덧붙여서 Fast Forward가 되지 않게 하려면 , 환경 설정에서 「fast-forward로 병합에 문제가 없어도 커밋을 작성」에 체크를 넣어 두면 좋은 것 같습니다.


feature/dev_#50 "에" develop "을" 리베이스



다음은 리베이스입니다. dev_#60이 먼저 병합되어 develop이 진행되어 버렸기 때문에, 그 「(dev_#60 수정분의) develop의 변경」을 자신의 브랜치(dev_#50)에 리베이스 하는 장면을 상정합니다.

아래와 같이 dev_#50보다 develop이 진행되고 있는 상황이군요.


명령으로


$ git branch
  develop
* feature/dev_#50
  feature/dev_#60
  master
$ git rebase develop
First, rewinding head to replay your work on top of it...
$ git branch
  develop
* feature/dev_#50
  feature/dev_#60
  master
$ git log --oneline --graph
*   325aedc (HEAD -> feature/dev_#50, develop) Merge branch 'feature/dev_#60' into develop
|\
| * 72bafd1 (feature/dev_#60) 消費税対応1.05倍 #60 2016/12/26
|/
* 0ad8ea7 (master) initial
$

아래와 같이, develop의 변경분이 dev_#50에 받아들여, 리베이스 할 수 있었습니다.


SourceTree에서



SourceTree에서는 다음과 같습니다.
dev_#50을 두 번 클릭하여 checkout하고(굵은 글씨), develop을 마우스 오른쪽 버튼으로 클릭하고 "현재 변경 사항을 develop으로 다시 베이스"를 선택합니다.


명령과 동일한 결과를 얻었습니다.


미안해.

관련 링크


  • GitHub 병합 및 리베이스 정보
  • SourceTree에서 Git Flow를 움직여보십시오.
  • 좋은 웹페이지 즐겨찾기