ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2022-07-21 : Git
    TIL ( Today I Learned ) 2022. 7. 21. 10:53

    git 공부

    1. Merge의 상황

    - 내가 pull을 실행한 후 작업 중 다른 사람이 push를 하여 원격저장소를 업데이트 한 경우 내 push 요청은 거부된다

    → 이런 경우 merge라는 작업 진행하여 다른 사람의 업데이터 이력을 내 저장소에도 갱신

         ( 만약 merge하지 않은 채로 이력을 덮어쓰면 다른 사람이 push한 업데이터 내역 사라짐 )


    참고 자료 : https://yoonsidae.tistory.com/46

    Git 명령어 기본

    // git에서 사용중인 (출력되는)이름을 바꾼다
    git config user.name 'name'
    
    // git에서 사용중인 (출력되는)이메일을 바꾼다
    git config user.email 'email@naver.com'

    - config 뒤에 --global를 붙이면 전역 설정을 할 수 있다

     

    // 브랜치를 새로 만듦과 동시에 이름을 정한다.
    git checkout -b "브랜치이름"

     

    // 코드 변경사항을 모두 스테이지에 올린다.
    git add .
    
    // 스테이지에 올린 내용을 commit함과 동시에 메시지를 입력
    git commit -m ""
    
    // commit을 서버에 push한다 (업로드 개념)
    git push origin "브랜치이름"
    // 원격저장소의 커밋 변경내역을 가져온다.
    git fetch
    
    // 원격저장소의 커밋 변경내역을 가져옴과 동시에 로컬 브랜치에 병합
    git pull

     

    // 현재 체크아웃중인 브랜치에서 다른 브랜치의 내용을 가져온다.
    git merge --no-ff "브랜치 이름"

    - 내가 B 브랜치 기준으로 만들었던 C 브랜치의 작업이 끝나서 B브랜치에 다시 병합을 해야한다면?

       답 : B브랜치로 이동(체크아웃)한 뒤에  git merge --no-ff "B" 명령어 사용

    // git merge 명령하기 전으로 되돌린다.
    git merge --abort

     


    참고 자료 : https://jae04099.tistory.com/223

    Git 작업 시

    1. 자신이 수정한 사항은 master 브랜치가 아닌 다른 브랜치를 따서 작업

        ㆍmaster 브랜치는 언제나 배포 가능한 상태, 안정적인 상태이어야 한다

        ㆍ기본적으로 작업 할 브랜치의 이름은 기능에 따라 feature, bugfix 등으로 정한다.

    // 브랜치 생성
    git branch <branch-name>
    
    // 브랜치 이동
    git checkout <branch-name>
    
    // 브랜치 생성 후 바로 이동
    git checkout -b <branch-name>
    
    // 브랜치 목록 보기
    git branch
    
    // 브랜치 삭제
    git branch -d <branch-name>

     

    2. 작업 후 master 브랜치에 병합하는 방법은 merge와 rebase가 있다

        ㆍ커밋을 한 후 바로 push하는 경우는 잘못된 방법으로 원하는 만큼 커밋을 한 후 마지막에 push를 하면

            커밋 이력이 나타난다

        ㆍmerge는 그냥 git push origin master처럼 현재까지의 커밋 이력을 하나하나 살려 자세하게 병합

        ㆍrebase의 squash는 말 그대로 커밋 이력들을 하나로 압축하여 병합

    - 커밋의 기록을 소중히 하는 사람이면 merge

       협업중이라면 필요한 기록만 남기는 rebase가 적절하지 않을까?

    // 기록 확인, q : 탈출
    git log
    // 가장 최근에 진행한 커밋을 포함 3개의 커밋을 rebase
    git rebase -i HEAD~3

    1. i를 누르면 수정 가능 상태가 된다. 맨 아래 INSERT라고 뜸

    2. 맨 위 커밋을 제외한 나머지 커밋을 pick 대신 s로 변경

    3. esc를 누르면 저장 가능 상태가 된다. INSERT가 사라짐

    4. :wq를 눌러 창을 빠져나온다.

     

    5. 엔터를 누르면 아래와 같이 squash한 커밋들 중 삭제하고 남기고 수정할 수 있는 창이 뜸

    6. 이도 똑같이 i를 누르고 수정

    7. 삭제하고 싶은 커밋은 맨 앞에 #을 붙이고 수정하고싶은 커밋은 수정하거나 남겨두면 된다.

    8. 그리고 엔터를 누르면 성공적으로 리베이스 됐다는 말과 함께 수정했던 커밋만 남는다.

    9. push

     

    3. pull request ( PR ) - Github

    - 이후 최종적으로 push를 하면 ( 작업 브랜치에 push시 ), pull request를 만들 수 있다

    - push를 하면 push 한 원격 저장소에 Compare & pull request 알림을 뜬다

    - PR 작성 후 Create pull request 클릭

    - master 브랜치에 적용시키기 적합하다면 merge pull request 클릭

     

    - 새 작업을 진행할 때는 다시 브랜치를 따서 작업하는 식을 반복!


    참고자료 : https://velog.io/@hwi_chance/Git-Ch.4-%EC%8B%A4%EB%AC%B4-%EC%82%AC%EB%A1%80%EB%A1%9C-Git-%EB%8B%A4%EB%A3%A8%EA%B8%B0

    Git 명령어

    1. amend

    git add new_file.txt
    git commit --amend

    - 커밋에 반영되었어야 할 내용이 누락된 경우 새로운 커밋을 생성할 필요없이, amend 명령어를 통해서 기존 커밋에 추가

    - amend 명령어로 커밋 메시지도 수정 가능

    - 원격저장소에 이미 push된 커밋을 amend로 수정한 경우 원격저장소에 force push하여 변경된 커밋으로 덮어 씌어야 함

     

    2. cherry-pick

    git cherry-pick [selected commit id]

    - 다른 branch에 속한 커밋 중 원하는 하나만 현재 branch로 반영하는 기능

    - 선택된 커밋 이전의 커밋이나 이후의 커밋은 현재 branch로 반영되지 않음

     

    3. reset

    git reset --mixed [commit]
    git reset --soft [commit]
    git reset --hard [commit]

    - branch를 옛날 커밋으로 되돌리는 기능

    - --mixed : reset의 기본 옵션으로, 선택한 커밋 이후의 변경사항들은 없애지 않고

                     unstaged 상태 ( untracked 혹은 modified ) 로 남겨두는 옵션

    - --soft : --mixed와 유사하지만 변경사항들을 staged 상태로 남겨두는 옵션

    - --hard : 변경사항들을 모두 없애고 완전히 깔끔한 상태로 변경하는 옵션

     

    4. revert

    git revert [commit]

    - 잘못된 커밋을 생성한 경우 해당 커밋 이전으로 reset할 수도 있지만, 변경사항 되돌리는 커밋을 새로 생성하는 것이 더 좋음

    - revert : 선택한 커밋 이전의 커밋 상태를 가지고 와서 새로운 커밋을 생성하는 명령어

    - 즉, 잘못된 커밋을 제거하는 것이 아닌, 그 이전의 상태로 다시 덮어 씌우는 작업

     

    5. stash

    git stash
    git stash apply

    - stash : 커밋하지 않은 변경 사항을 서럽에 넣어두기

    - stash apply 서랍에 넣어둔 작업들을 다시 가져오기

    - tracked 상태인 파일들만 서랍에 넣을 수 있음


     

    'TIL ( Today I Learned )' 카테고리의 다른 글

    2022-07-27 : 파일업로드 & buffer, 기타 등등  (0) 2022.07.27
    2022-07-26 : Git  (0) 2022.07.26
    2022-07-25 : JAVA  (0) 2022.07.25
    2022-07-18 : JS  (0) 2022.07.18
    2022-7-15 : react / JS / TS  (0) 2022.07.15

    댓글

Designed by Tistory.