sitelink1 http://inspiredjw.com/entry/Git-commit-%...8%EA%B8%B0 
sitelink2  
sitelink3  

pullrequest1.png

 

일반적으로 repo를 읽는 권한만 있는 사람들 경우에는 원본 repo를 fork하고

복제된 repo안에 feature branch를 파서 작업을 합니다.

복제 repo/feature branch 와 origin/master 의 diff 를 가지고서 pull-request 요청을 보통하곤 합니다.

하지만 이 과정에서 Merge pull request #00 from repo/branch 와 같은 더러운(?) commit 메시지가 많이 발생하게 됩니다.

꼭 pull-request를 통하지 않고 내부 사람들끼리 작업을 하더라도 master가 아닌 다른 브랜치랑 머지 할때마다 저런 추가적인 commit이 발생하여 commit history가 정신이 없어집니다.

 

해결방법

 

그래서 이를 해결하기 위해 보통 다같이 master 브랜치에 곧바로 push하는 방법이 있는데요.

작업은 기존 feature branch에서 하더라도

그 branch에서 발생한 모든 commit을 squash 해줘서 하나의 commit으로 만듭니다.

그리고 그 commit을 master에 push합니다.


제가 자주 사용하는 squash 명령어는 아래와 같습니다.

현재 feature branch에 있고 3개의 commit을 했다고 가정하고 명령어를 입력합니다.

 

2016-10-04 오후 5-28-47.png

 

가장 최근 3개의 커밋을 하나로 squash 해주는 것입니다.
저 명령어를 실행하면 보통 git 설정에서 기본으로 지정되어 있는 에디터가 열리며
어떤 순서로 squash를 할지 물어보게 됩니다.

 

2016-10-04 오후 5-29-09.png

 

이런식으로 보통 열릴 텐데요.

 

보시다시피 가장 먼저 발생한 commit부터 순차적으로 위에서 아래로 보여줍니다.

여기서 순서대로 squash를 하려면

 

2016-10-04 오후 5-29-49.png

 

이렇게 하고 저장을 하고 에디터를 닫으면

다시 한번 에디터가 열리면서 squash된 새로운 commit 메시지를 입력하라고 합니다.

commit 메시지를 적고 에디터를 닫으면 squash가 완료된 것입니다.

이때 발생한 commit hash를 클립보드에 복사 해놓습니다 (Ctrl+C   or   Cmd+C)
 

이제 squash된 commit을 master로 옮겨보겠습니다.

 

2016-10-04 오후 5-30-08.png

 

이렇게 master branch로 이동합니다

 

2016-10-04 오후 5-30-49.png

 

이렇게 명령어 뒤에 아까 복사 해놓은 hash를 붙여 넣고 명령어를 입력합니다.

아까 다른 branch에서 squash한 commit이 이제 master branch에 적용되었습니다.

다 되었으니 슬슬 push 해볼까요 ㅎㅎ

 

2016-10-04 오후 5-31-12.png

 

그러나 -_-

 

2016-10-04 오후 5-31-30.png

 

origin/master 에 다른 사람이 먼저 push 하는 바람에 망했죠;

 

여기서 핵꿀팁!

 

2016-10-04 오후 5-31-46.png

 

이 명령어를 사용하면 origin/master에 있는 내용들은 local/master에 pull해주고나서
local에서 commit되어 있는 commit들을 맨 위로 배치해 줍니다.
 

또 다시 다른 누군가가 push하기 전에 재빨리 git push 합니다.

 

 

그 외 다른 방법

reset을 이용하는 방법, patch를 만들어서 apply하는 방법 등 위와 같은 작업을 하는 방법이 여러가지 있지만

저는 개인적으로 위 방법이 좀 더 과정이 이해가 가고 간단하다고 생각해서 사용하고 있습니다.

번호 제목 글쓴이 날짜 조회 수
55 VisualSVN svn 프로토콜 열기 (Open SVN protocol on VisualSVN) file 황제낙엽 2018.11.22 518
54 VisualSVN Server Over view 황제낙엽 2018.07.11 67
53 서브버전(subversion) svn locked 오류 해결 황제낙엽 2018.06.11 118
52 Previous operation has not finished; run 'cleanup' if it was interrupted file 황제낙엽 2018.04.02 435
51 Optimize Tortoise SVN Cache (TSVNCache.exe) Disk I/O file 황제낙엽 2018.04.02 177
50 [SVN] VisualSVN 계정 관리 방법 file 황제낙엽 2017.05.26 352
49 [SVN] VisualSVN Server 의 저장소 백업 및 복원 황제낙엽 2016.11.04 2761
» Git commit 이력(Merge pull request #00 from repo/branch) 깔끔하게 관리하기 file 황제낙엽 2016.10.04 82
47 10분만에 파악해보는 What is GitHub (Hello World) file 황제낙엽 2016.10.04 236
46 태그(Tag) 생성 file 황제낙엽 2016.09.29 344
45 git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기 file 황제낙엽 2016.09.29 572
44 [Git] SourceTree 에서 Global 변수 세팅 file 황제낙엽 2016.09.27 67
43 쓸만한 Git 용 GUI 프로그램 file 황제낙엽 2016.09.26 181
42 Git 관련 참조 URL 황제낙엽 2016.09.13 98
41 Git, Windows 2008 server, ASP.NET, IIS, Bonobo Server, Visual Studio, Msysgit, TortoriseGIT file 황제낙엽 2016.09.13 149
40 Git 설치하기 - Window file 황제낙엽 2016.08.08 53
39 Git For Windows 황제낙엽 2016.08.08 91
38 [VSS] 소스 세이프 자동으로 백업하기 황제낙엽 2016.07.12 81
37 [VSS] Using Visual SourceSafe – How to backup & restore VSS DB file 황제낙엽 2016.07.12 7519
36 [VSS] How to force logout of all users on VSS? 황제낙엽 2016.07.12 395