Git: 대화형 명령 배우기

5660 단어 git
아마도 명령줄에서 Git을 사용하기 시작했을 것입니다. 대단해! 그러나 불행히도 많은 VSCode Git 확장 중 하나와 같은 Git의 GUI 버전으로 바로 이동하는 것이 일반적이고 이해할 수 있습니다.

Git과 공동 작업을 처음 시작할 때 비슷한 작업을 수행했지만 명령줄에서 이를 막았더라면 훨씬 더 빨리 배울 수 있었을 것입니다.

명령줄을 사용하는 이유




첫 번째 원칙

좋아요, Git GUI가 나쁘다고 말하는 것이 아닙니다. 실제로는 그 반대입니다. 요즘은 주로 복잡한 트리 구조를 시각화하는 특정 작업에 항상 사용합니다.

내 말은 Git을 최대한 활용하고 완전히 이해하려면 먼저 명령줄을 통해 배워야 한다는 것입니다.

대화형 추가




커밋 정리

이것은 내가 기능을 작성할 때 정말 유용하며 같은 커밋에 포함하고 싶지 않은 다른 것들을 업데이트했을 수도 있습니다. 테스트 수정, 다른 클래스 리팩토링 등

이렇게 하면 모든 변경 사항의 상태를 볼 수 있고 사용할 수 있는 모든 옵션을 제공합니다.

$ git add -i
           staged     unstaged path
  1:    unchanged        +2/-0 README.md

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff     7: quit     8: help
What now> 


그런 다음 추가 또는 패치 옵션 옵션을 사용하여 특정 파일을 선택적으로 준비할 수 있습니다.

추가 옵션은 파일의 모든 변경 사항을 준비하고, 패치 옵션은 파일 내의 모든 다른 덩어리(변경 사항을 함께 그룹화)를 거치며 선택적으로 각 덩어리를 준비할 수 있습니다.

           staged     unstaged path
  1:    unchanged        +2/-0 README.md
Patch update>> 1
           staged     unstaged path
* 1:    unchanged        +2/-0 README.md
Patch update>> 
diff --git a/README.md b/README.md
index 48bee75..6056e4a 100644
--- a/README.md
+++ b/README.md
@@ -20,3 +20,5 @@ $ login --store=https://dev-mimir.com
 $ populate products
 $ node serve
+
+some change
(1/1) Stage this hunk [y,n,q,a,d,e,?]?



인터랙티브 리베이스




지점 정리

좋아, 이것은 내가 가장 좋아하는 Git 명령입니다. 지금 기억할 수 있는 것보다 더 많이 베이컨을 저장했습니다. 의심스러운 경우 대화형 리베이스.

따라서 로컬 지점에서 작업할 때 지저분한 커밋을 많이 하는 경향이 있습니다. 때로는 롤백하려는 경우 문제를 일으킬 수 있는 의미가 없는 순서가 될 수 있습니다. 그들이 정말로 해서는 안 되는 것들을 포함하고, 그것들은 잘 설명되어 있지 않습니다.

원격 브랜치로 푸시하기 전에 일반적으로 브랜치를 정리하기 위해 대화형 리베이스를 수행해야 합니다.

$ git rebase -i HEAD~4
 pick a204433 refactor: rename TicketBoard
 pick 72ceae8 refactor: generic support tickets table
 pick ba2925d refactor: organise React folder components/services
 pick 95023db feat(wip): added TicketBoard placeholder services

 # Rebase 9c24617..95023db onto 95023db (4 commands)
 #
 # Commands:
 # p, pick <commit> = use commit
 # r, reword <commit> = use commit, but edit the commit message
 # e, edit <commit> = use commit, but stop for amending
 # s, squash <commit> = use commit, but meld into previous commit
 # f, fixup <commit> = like "squash", but discard this commit's log message
 # x, exec <command> = run command (the rest of the line) using shell
 # b, break = stop here (continue rebase later with 'git rebase --continue')
 # d, drop <commit> = remove commit
 # l, label <label> = label current HEAD with a name
 # t, reset <label> = reset HEAD to a label
 # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
 # .       create a merge commit using the original merge commit's
 # .       message (or the oneline, if no original merge commit was
 # .       specified). Use -c <commit> to reword the commit message.
 #
 # These lines can be re-ordered; they are executed from top to bottom.
 #
 # If you remove a line here THAT COMMIT WILL BE LOST.
 #
 # However, if you remove everything, the rebase will be aborted.
 #
 # Note that empty commits are commented out


이 명령과 함께 제공되는 모든 유용한 문서를 보세요. 모든 것이 바로 거기에 있기 때문에 실제로 무엇을 하는지 기억할 필요조차 없습니다.

따라서 첫 번째 커밋과 마지막 두 커밋을 함께 스쿼시하고 싶다면 쉽게 할 수 있습니다. 문서를 따르고 커밋을 재정렬하고 pick에서 squash로 변경하기만 하면 됩니다.

$ git rebase -i HEAD~4
 pick ba2925d refactor: organise React folder components/services
 pick 95023db feat(wip): added TicketBoard placeholder services
 squash a204433 refactor: rename TicketBoard
 squash 72ceae8 refactor: generic support tickets table



결론



이 게시물이 Git에서 많은 것을 얻는 데 많은 것이 필요하지 않다는 점을 강조했기를 바랍니다. 이 몇 가지 명령만으로도 많은 유연성과 제어를 제공할 수 있는데, 이는 종종 일부 Git GUI에서 부족한 부분입니다.

좋은 웹페이지 즐겨찾기