Git가 제출한 명령qs(quick squash)를 가장 빨리 요약해 보았습니다.

입문


여러분 Git 쓰세요?나는 1년 정도의 Git 경력을 가지고 있다.
그 전에 버전 관리는 SVN을 사용했지만 어떤 프로젝트에서 Git를 처음 접했습니다.
당시 SVN에 익숙했던 나는 Git에 대해 곤혹스러웠지만, 약속(저장점)을 한 후에 로그를 예쁘게 만들 수 있고, 없는 일을 할 수 있기 때문에, 지금은 Git가 가장 높다!SVN으로 다시 돌아가고 싶지 않아요.
하지만 겁이 나서 너무 꼼꼼하게 제출하면 "아, 이게 정리가 되네!"이것은 일상적인 밥이다!
통상적으로 다음과 같은 절차를 통해rebase를 진행하여 총결산하여 제출한다
  • git rebase -i HEAD에서 지정한 객체의 과거 제출
  • GIT EDITOR(vim,nano 등) 일어나서 제출 하나하나를'pick->squash'
  • 로 바꾸기

  • 닫기GIT EDITOR
  • 하지만 이 절차를 따를 때마다 힘들어서 명령을 만들었어요.
    노트: @chaspy 함께 제작되었습니다.본 보도에서 qs명령 제작까지의 시도와 과정, 기술적 요소 할애.물론 공부도 하기 때문에 다른 기사에 잘 싣겠습니다.같이 작업하면서 드디어 해냈어요.감사합니다

    무슨 명령


    이것은 여러 개의 제출을 하나로 합친 명령이다.
    명령 형식 예시에서 HEAD~i 에서 HEAD~(j-1) 로 제출된 메시지를 "quick squash"로 통합합니다.
    $ qs -n i..j -m"quick squash" -f
    
    예를 들겠습니다.
    파일이 추가된 제출이 많습니다.
    $ git log --oneline
    becd1ab (HEAD -> master) Add file-10   // HEAD~0
    e5cc748 Add file-9                     // HEAD~1
    bbd11e8 Add file-8                     // HEAD~2
    f93742b Add file-7                     // HEAD~3  ここから
    5ca590b Add file-6                     // HEAD~4  ~
    ea8ba99 Add file-5                     // HEAD~5  ~
    39f4b30 Add file-4                     // HEAD~6  ここまでのコミットを
    632e3ee Add file-3                     // HEAD~7  このコミットに含めたい
    ce882d0 Add file-2                     // HEAD~8
    3ab0e11 Add file-1                     // HEAD~9
    3105266 Add file-0                     // HEAD~10
    f712ef6 Initial commit
    
    가령 많은 일이 있다고 가정하면,'Addfile-7'에서'Addfile-4'까지'Addfile-3'제출에 포함하고 싶습니다.
    또한 제출된 제출 메시지를'Hello QS'로 바꾸고 싶습니다.
    참고로 HEAD~j 디버깅 옵션입니다.대량의 로그가 출현하다.
    $ ./qs -n 3..7 -d -m "Hello QS"
    INFO[0000] [11] pickup -> pickup  f712ef6 Initial commit 
    INFO[0000] [10] pickup -> pickup  3105266 Add file-0 
    INFO[0000] [ 9] pickup -> pickup  3ab0e11 Add file-1 
    INFO[0000] [ 8] pickup -> pickup  ce882d0 Add file-2 
    INFO[0000] [ 7] pickup -> pickup  632e3ee Add file-3 
    INFO[0000] [ 6] pickup -> squash  39f4b30 fixup! Add file-3 
    INFO[0000] [ 5] pickup -> squash  ea8ba99 fixup! Add file-3 
    INFO[0000] [ 4] pickup -> squash  5ca590b fixup! Add file-3 
    INFO[0000] [ 3] pickup -> squash  f93742b fixup! Add file-3 
    INFO[0000] [ 2] pickup -> pickup  bbd11e8 Add file-8 
    INFO[0000] [ 1] pickup -> pickup  e5cc748 Add file-9 
    INFO[0000] [ 0] pickup -> pickup  becd1ab Add file-10 
    Do you squash the following commits?(y/n)
    y
    …ログ…
    $ git log --oneline
    665635b (HEAD -> master) Add file-10
    25a658c Add file-9
    446f5ad Add file-8
    da0197d Hello QS
    ce882d0 Add file-2
    3ab0e11 Add file-1
    3105266 Add file-0
    f712ef6 Initial commit
    
    $ git show da0197d  // HelloQSのコミット内容を見る
    commit da0197d24cffbac543ba1911cf05dac967f6fb8e
    Author: git fixup <[email protected]>
    Date:   Fri Aug 24 23:19:10 2018 +0900
    
        Hello QS
    
    diff --git a/file-3 b/file-3
    new file mode 100644
    index 0000000..6d0cc47
    --- /dev/null
    +++ b/file-3
    @@ -0,0 +1 @@
    +file-3
    diff --git a/file-4 b/file-4
    new file mode 100644
    index 0000000..e53a9ad
    --- /dev/null
    +++ b/file-4
    @@ -0,0 +1 @@
    +file-4
    diff --git a/file-5 b/file-5
    new file mode 100644
    index 0000000..079a298
    --- /dev/null
    +++ b/file-5
    @@ -0,0 +1 @@
    +file-5
    diff --git a/file-6 b/file-6
    new file mode 100644
    index 0000000..e01f1fc
    --- /dev/null
    +++ b/file-6
    @@ -0,0 +1 @@
    +file-6
    diff --git a/file-7 b/file-7
    new file mode 100644
    index 0000000..f8b15d3
    --- /dev/null
    +++ b/file-7
    @@ -0,0 +1 @@
    +file-7
    
    내가 예상한 대로 약속하고 싶었어.
    이 때 -d 옵션을 사용하면 확인 화면이 표시되지 않고 빠르게 실행됩니다.
    $ qs -n 3..7 -m "Hello QS" -f
    Successfully rebased and updated refs/heads/master.
    
    $ git log --oneline
    585f9ee (HEAD -> master) Add file-10
    9a5edfc Add file-9
    9ec94c3 Add file-8
    a469db8 Hello QS
    f101a87 Add file-2
    c5bccf9 Add file-1
    4d40f78 Add file-0
    1c945c1 Initial commit
    
    매우 빠르다.하지만, 나는 qs가 싸우는 것이 매우 피곤하다고 생각한다. 그래서 Alias를 청한다

    설치 방법


    Go 언어로 쓰기 때문에 사용-f.Go 언어는 기본적으로 교차 컴파일에 대응하고 Windows, Mac, Linux에 대응할 수 있는 점도 장점이다.(Windows의 텍스트 색상은 지저분하게 유지됩니다. 다음 버전에서 수정)
    Go 언어에 대한 환경 구축이 완료된 경우(Go 설치, 환경 변수 설정).
    $ go get github.com/kamontia/qs
    
    이 명령만 사용할 수 있습니다 go get.
    겸사겸사 말씀드리지만, 원본 코드는 아래에 있습니다.
    Github::qs::Code
    바이너리 파일은 Release 페이지에 있습니다.(MacOS,Windows,Linux)
    Github::qs::Release

    앞으로


    발행 버전qs이기 때문에 소스 코드는 스파게티를 초월한다.그리고 Go는 처음 만져보는데 만약 그렇다면 코드를 다 쓴 후에 "& Go의 느낌을 너무 재구성해야 하나요??"그래서 나는 Go의 책을 샀다.OS 의존에 대한 부분도 곧 유효한 정보를 찾았기 때문에 대응을 추진하고자 합니다.0.1.0 먼저 움직이는 물건이라 개의치 않고 진행했고 0.1.0 향하는 동력을 유지하기 위해 투고했다.개선의 여지만 있는 놈이지만 여러분의 협조를 쉽게 받을 수 있는 코드로 수정해야 하니까 따뜻하게 지켜주시길 바랍니다.

    좋은 웹페이지 즐겨찾기