⛏️
공부방
  • README.md
  • 프로젝트
    • ft_transcendence
      • 설계
        • 0. 프론트 디자인
        • 1. BackboneJS 뷰 객체
        • 2. API 설계
        • 3. 레일즈 라우팅 구현
        • 4. DB 설계
        • 5. 채널 설계
    • slab-saver
    • react-payment
  • 공부
    • HTML, CSS
      • GRID
      • emmet
      • position
      • CSS Unit
        • 단위 정리
        • 기준을 정해보자
        • em의 정확한 기준은 뭐야?
      • flex
      • NAVBAR 실습
      • 유튜브 화면 만들어보기
    • SQL
      • 이론
        • 1강 데이터베이스
        • 2강 다양한 데이터 베이스
        • 3강 데이터베이스 서버
      • 명령어
        • DB 관리
        • TABLE 관리
        • Constraints
        • SQL 명령어 - 1
        • SQL 명령어 - 2
        • SQL 명령어 - 3
        • SQL 명령어 - 4
        • SQL 명령어 - 5
    • Ruby
      • 루비 객체와 클래스
      • 곡괭이
        • Chapter2. Ruby.new
        • Chapter3. 클래스, 객체, 변수
        • Chapter4. 컨테이너, 블록, 반복자
        • Chapter5. 기능 공유하기
        • Chapter6. 표준 타입
        • Chapter8. 메서드 파헤치기
    • Python
      • 유용한 링크
    • RubyOnRails
      • 아직 정리하지 못한 것들
        • RSPEC 을 이용한 테스트 완전 자동화
        • 레일즈 이니셜라이징 과정
        • 액션케이블 구체적으로 정리하기
        • 웹팩으로 자바스크립트 모듈 관리하기
      • ACTIVE JOB
        • 액티브잡의 기본
        • 실전! 액티브 잡을 이용한 스케쥴링
        • 서버를 껏다 키면 스케쥴링 된 이벤트가 사라진다!
      • ACTION CABLE
        • 액션케이블 Consumer를 이용해서 문제 해결
        • 액션케이블 연결 순서
      • ACTIVE STORAGE
      • 모델
        • validation
          • seeds 데이터 validation 스킵
          • validation 검사가 save, update, create 모든 경우에 일어난다
          • validator 클래스
          • 커스텀Validation
          • validates format(정규표현식)
        • 액티브레코드 find의 다양한 활용
        • 한 레코드에 동시 접속 막자!! with_lock
        • 레일즈 where 사용법
        • 레일즈에서 모델 관련 이슈
        • 모델이름바꿀때명심할것
        • 모델의 includes 메서드
        • 연관 모델을 다른 이름으로 설정하고 가져오기
      • 기본 상식
        • form으로 전달되는 params를 분석해보자
        • StrongParameter 쿼리 배열 받기
        • view helper로 디버깅 하는 방법
        • css 파일을 수정했는데 적용이 안된다?
        • StrongParameter 일반데이터와 객체 데이터 한번에 받기
        • wrap-parameter body가 두 번씩 날라오는 이유
        • 컬렉션 map에서 요소 스킵하는법
        • CASE를 이용해서 정렬(일반적인 정렬 X)
        • 문자열(정규표현식)
        • TIME ZONE 설정하기
        • 커스텀exception
      • RSPEC으로 모델 테스트하기
      • 한 눈에 읽는 루비 온 레일즈
      • Perfect RubyOnRails
        • Chapter1. 소개
        • Chapter2. RubyOnRails 기본
        • Chapter3. 스캐폴딩
        • Chapter7. 라우팅
        • Chapter8. 테스트
    • Javascript
      • var, let, const 차이
      • 브라우저 동작 원리
      • 디바운싱과 쓰로틀링
      • Tagged Template Literal(styled-components)
      • IntersectionObserver 를 사용해서 스크롤 이벤트의 부하 줄여주기
      • EVENT LOOP
        • 자바스크립트에서 어떻게 비동기적인 실행이 가능한걸까?
        • 이벤트 루프의 동작
        • setTimeout이 실행되면 어떤 동작이 일어날까?
        • 블록은 실행이 보장된다
        • 콜스택에 있는 블록이 보장된다는 점을 이용해서 브라우저 죽이기
        • setTimeout 무한반복으로 브라우저는 죽을까?
        • Promise 무한반복으로는 브라우저를 죽일 수 있을까?
        • RAF는 그럼 뭐야?
      • forEach는 반복도중 멈출 방법이 throw 밖에 없다!
      • 임시
        • 정리할 것 목록
          • 자바스크립트 기본 문법
        • 이벤트 임시 정리
      • 유용한 링크
      • arrow function 을 이용한 bind 이슈 해결
      • preventDefault - passive
      • CRITICAL-RENDERING-PATH
      • setInterval에 클로져 개념 사용하기
      • 오디오 문제 이슈
      • 자바스크립트의 식과 문
        • 식과 문이란 무엇인가...
        • 식
          • 1. 기본값과 래퍼객체
          • 2. 참조값과 가비지컬렉팅
        • 식을 조금 더 자세히 알아보자
      • prototype, [[Prototype]] 차이
      • export, import 학습
      • ESlint
      • 아주아주기본
        • Chatper1. 기본
        • Chapter2. 타입
        • Chapter3. 연산자
        • Chapter4. 제어문
        • Chapter5. 배열
        • Chapter6. 함수
        • Chapter7-1. 객체
        • Chapter7-2. 객체
        • Chapter8. 표준객체
        • Chapter9. DOM
      • 이벤트 위임
      • 이벤트가 버블링 되서 root 까지 가다보면... 부모의 부모의 ... 모든 click 이벤트를 발동시키는거 아니야?
      • classList
    • BackboneJS
      • Backbone Model 프로토타입에 메서드 구현하기
      • BackboneJS의 각 요소의 역할과 책임을 확실히 이해하자
      • Window 이벤트를 listenTo로 감시하기
      • 뷰 자신이 자신을 지워야 할 때를 감지하려면 어떻게 해야하는가?
      • 백본 VIEW의 remove와 jquery의 remove 는 다르다!
      • 백본 컬렉션 URL에 쿼리 붙이기
      • index.html.erb와 BackboneJS의 결합
      • 백본 모델과 컬렉션에서 fetch 를 통해 JSON 가져오기!
      • 모델은 urlRoot, 컬렉션은 url
      • ISSUE
      • Absolute Beginner
        • Part1
        • Part2
        • Part3
        • Part4
    • 문제풀이
      • 01. 유효한 팰린드롬(leetcode: 125)
      • 02. 문자열 뒤집기(leetcode: 344)
      • 03. 로그파일 재정렬(leetcode 937)
      • 04. 가장 흔한 단어(leetcode: 819)
      • 05. 그룹 애너그램(leetcode: 49)
      • 06. 가장 긴 팰린드롬 문자열(leetcode: 5)
      • 07. 두 수의 합(leetcode: 1)
      • 08. 빗물 트래핑
      • 09. 세 수의 합(leetcode: 15)
    • BlackCoffeeStudy
      • level1
        • 1주차
    • express
      • Untitled
      • 구글 애널리틱스 연결하기
      • passport를 활용한 로그인
      • express-init 명령어 사용
      • ec2와 DBeaver
      • mariadb 설치
      • sequelize 설치 및 사용법
        • sequelize 설치
        • sequelize-cli 사용법
        • 모델 간 연관관계 맺기
        • Hook 사용하기
      • express-ejs-layout 활용하기
      • Bootstrap
      • npm install로 설치한 모듈 ejs에서 사용하기
      • 미들웨어
    • cypress
      • window.alert 테스트는 어떻게 하지?
      • 상수를 어디에 저장할건가?
      • before()와 beforeEach()
    • aws
      • aws로 프로젝트를 배포해보자!
      • nginx로 리버스프록시 서버를 만들자
      • github actions 로 푸쉬되면 자동으로 업데이트 하는 기능 만들어보기
    • react
      • Drag & Drop 를 이용해서 리스트 요소 순서 바꾸기
      • CRA에서 CRACO 사용하지 않고 절대경로 import(NODE_PATH)
      • useEffect내에서 state의 dependency 문제
      • IntersectionObserverAPI로 무한스크롤 구현
      • react-testing-library
        • 기본
        • react-router-dom 에서의 에러
        • event 발생시키기
        • Integration testing하기
        • async하게 렌더링 되는 요소 잡기
        • Mocking 하기
      • CRA로 만든 앱에서 절대경로로 import 해오기(alias하기)
      • 커스텀 훅 만들기
    • 타입스크립트
      • 조건부타입 (Conditional types)
      • Generics
      • Keyof 타입 오퍼레이터
      • Indexed Access Types
      • 타입 챌린지
        • easy
          • 00. Awaited
          • 01. Concat
          • 02. Exclude
          • 03. First Of Array
          • 04. If
          • 05. Includes
          • 06. Pick
          • 07. Readonly
          • 08. Length
          • 09. Tuple to Object
        • mediun
          • 01. Absolute
    • Firebase
      • 파이어스토어 규칙
    • 기타
      • 협업 프로세스
      • UUID
      • 구글애널리틱스 설치하기
      • 드림코딩 강의
        • 포트폴리오
          • CSS
            • nth-child
            • CSS 팁
          • 자바스크립트
            • 1. 스크롤에 따른 navbar 의 색 변경하기
            • 2. navbar 버튼을 누르면 해당 페이지로 스크롤링 되게 만들자
            • 3. 스크롤 다운 하면 arrow-up 버튼 나오게 하기
            • 4. project 필터링 구현
            • 5. project 필터링에 transition 효과 넣기
      • GIT
        • 기본 사용법 정리
        • git remote update - remote 브랜치 가져오기
  • 기타
    • 이것저것
      • 독서
        • 클린코드
          • Chapter0. 나는 왜 클린코드 책을 읽는가?
          • Chapter1. 클린코드
          • Chapter2. 의미있는 이름
          • Chapter3. 함수
          • Chapter4. 주석
          • Chapter5. 형식 맞추기
      • 용어
      • IDE
        • RubyMine
          • 실전이 중요!
          • 1. Editor Basic
          • 2. Navigation
          • 3. Completion
          • 4. Refactoring
          • 5. Code Assistance
      • MAC에서 살아남기
        • Alfred - Spotlight 업그레이드
        • Vimium
        • BetterTouchTool - 트랙패드
        • 구름 입력기 - ESC, `
        • Spectacle - 화면 분할
    • 원티드 프리온보딩
      • 1주차
        • 월요일
        • 목요일
      • 2주차
      • 3주차
      • 4주차
      • 5주차
      • 6주차
    • 일기장
      • 2020
        • December
          • 20201208(화)
          • 20201209(수)
          • 20201210(목)
          • 20201211(금)
          • 20201214(월)
          • 20201215(화)
          • 20201216(수)
          • 20201217(목)
          • 20201218(금)
          • 20201219(토)
          • 20201221(월)
          • 20201222(화)
          • 20201223(수)
          • 20201224(목)
          • 20201226(토)
          • 20201228(월)
          • 20201229(화)
          • 20201230(수)
          • 20201231(목)
      • 2021
        • January
          • 20210101(금)
          • 20210102(토)
          • 20210105(화)
          • 20210106(수)
          • 20210107(목)
          • 20210108(금)
          • 20210109(토)
          • 20210112(화)
          • 20210113(수)
          • 20210114(목)
          • 20210115(금)
          • 20210117(일)
          • 20210118(월)
          • 20210119(화)
          • 20210120(수)
          • 20210121(목)
          • 20210125(월)
          • 20210126(화)
          • 20210127(수)
          • 20210128(목)
          • 20210129(금)
        • February
          • 20210201(월)
          • 20210202(화)
          • 20210203(수)
          • 20210204(목)
          • 20210205(금)
          • 20210207(일)
          • 20210208(월)
          • 20210209(화)
          • 20210217(수)
          • 20210218(목)
          • 20210219(금)
          • 20210220(토)
          • 20210222(월)
          • 20210223(화)
          • 20210224(수)
          • 20210226(금)
          • 20210228(일)
        • March
          • 20210302(화)
          • 20210303(수)
          • 20210304(목)
          • 20210305(금)
          • 20210306(토)
          • 20210308(월)
          • 20210309(화)
          • 20210310(수)
          • 20210311(목)
          • 20210312(금)
          • 20210313(토)
          • 20210315(월)
          • 20210316(화)
          • 20210317(수)
          • 20210318(목)
          • 20210319(금)
          • 20210322(월)
          • 20210323(화)
          • 20210324(수)
          • 20210325(목)
          • 20210327(토)
          • 20210329(월)
          • 20210330(화)
          • 20210331(수)
        • April
          • 20210406(화)
          • 20210407(수)
          • 20210408(목)
          • 20210409(금)
          • 20210410(토)
          • 20210412(월)
          • 20210413(화)
          • 20210414(수)
          • 20210415(목)
          • 20210416(금)
          • 20210417(토)
          • 20210419(월)
          • 20210420(화)
          • 20210421(수)
          • 20210422(목)
        • July
          • 20210728(수)
Powered by GitBook
On this page
  • git 사용법
  • 커밋 변경
  • 깃 브랜칭 전략

Was this helpful?

  1. 공부
  2. 기타
  3. GIT

기본 사용법 정리

PreviousGITNextgit remote update - remote 브랜치 가져오기

Last updated 3 years ago

Was this helpful?

git 사용법

프로젝트를 git 으로 관리하기 시작하면 모든 파일들은 4가지 상태(life cycle)가 된다.

  1. untracked

  2. Unmodified

  3. Modified

  4. Staged

Untracked

추적(버전관리)되지 않는 파일을 의미한다. git 으로 관리하는 프로젝트에서 Untracked 의 상태를 갖는 파일은 보통 새로 만들어진 파일을 의미한다. 구태여 Untracked 상태로 내버려둘 필요가 없기 때문이다. 만약 해당 파일을 추적하고 싶지 않다면 .gitignore 를 이용한다.

Unmodified

추적 되고 있는 파일이면서 마지막 커밋을 기준으로 아직 수정이 되어있지 않은 상태다. 해당 상태는 git status 명령어를 입력해도 아무것도 볼 수 없다.

Modified

추적 되고 있는 파일이 직전 커밋을 기준으로 수정이 되고 새롭게 stage 로 올라가지 않은 상태.

Staged

추적되고 있지 않은 파일을 추적하기 위해 또는 추적 되고 있지만 변경 사항이 있을 때 add 명령어를 통해 Staged 상태로 만든다. Staged 되어있는 상태에서 commit 이 되면 해당 파일의 상태는 Unmodified 가 된다. commit 가 된다는 것은 버전을 새롭게 한다는 것을 의미한다. git log 명령어를 입력하면 commit 이력을 확인할 수 있다.

위 4가지 상태를 이해하고 기본 명령어 및 사용법을 알아보자.

기본 명령어

  1. init

    • 프로젝트를 git 으로 버전관리를 시작한다.

  2. add

    • Untracked 파일을 Staged 상태로 만든다.

    • Modified 파일을 Staged 상태로 만든다.

  3. commit

    • Staged 된 파일에 버전을 준다.

    • commit 된 파일들은 Unmodified 상태가 된다.

  4. branch

    • git branch <branch> 새로운 브랜치를 생성한다.

      • 생성된 브랜치는 현재 브랜치의 형상을 그대로 가지는 브랜치가 생성된다.

    • git branch -d <branch> 브랜치를 삭제한다.

    • git branch -D <branch> 브랜치를 강제로 삭제한다.

  5. checkout

    • 브랜치를 변경한다.

    • git checkout -b <branch> 를 통해 브랜치 생성, 이동을 동시에 할 수 있다.

  6. remote

    • 원격 저장소와 관련된 명령어.

    • git remote add <name> <url> 원격저장소를 name 으로 추가함

      • 주로 git remote add origin <url> 처럼 origin 으로 사용하는 경우가 많음

      • 이렇게 이름을 지정해서 추가할 수 있다는 건 하나의 로컬 저장소에 여러 개의 원격 저장소를 추가할 수 있다는 이야기가 됨

    • git remote update 로 원격저장소의 정보를 업데이트 한다.

      • git fetch 와 기본적으로 동일하다. fetch 는 현재 브랜치만을 업데이트 한다면 remote update 는 모든 브랜치를 대상으로 fetch 를 해온다.

  7. push

    • 현재 로컬의 커밋 내용을 원격저장소에 올린다.

    • git push <원격저장소이름> <브랜치명> 으로 올림

    • ‼️push 을 할 때는 먼저 원격저장소의 브랜치가 내 로컬 저장소의 브랜치보다 앞서 있는지를 확인해야한다.

      • 팀원이 같은 브랜치에 먼저 push 를 해놓은 상태면 내 로컬과 맞지 않는 상태가 되어서 문제가 발생할 수 있기 때문이다.

      • 만약 원격저장소가 앞서 있다면, 먼저 pull 을 이용해 로컬 브랜치를 최신화 하는 작업이 필요하다.

    • ⚡ git push origin —-delete <branch> 로 원격저장소의 브랜치를 삭제할 수 있다!

  8. pull

    • 원격 저장소에 있는 내용을 로컬 저장소로 가져온다.

    • git pull <원격저장소이름> <브랜치명>

    • ‼️ 원격저장소가 내 로컬 저장소와 차이가 있을 때 conflict 가 발생할 수 있다.

    • pull 은 fetch + merge 다.

  9. fetch

    • 원격 저장소에 있는 내용을 가져온다.

    • ‼️ 가져오기만 하지 병합하지는 않는다.

      • 이 말은 원격 저장소에 있는 내용을 현재 저장소로 가져오지만, pull 과는 다르게 현재의 내용에 원격 저장소의 내용을 덮어 씌우지는 않는다는 것이다.

    • git log HEAD origin/<branch> 를 통해서 현재 로컬의 브랜치와 원격 저장소 브랜치의 차이를 확인할 수 있다.

      • test4 브랜치는 현재 원격 저장소가 로컬 저장소보다 앞서있다.

    • git diff HEAD origin/<branch> 명령어를 통해 그 차이를 터미널로 확인할 수 있다.

    • git merge origin/<branch> 를 통해 원격 저장소의 내용을 병합할 수 있다.

      • ‼️ pull 과 마찬각지로 confilct 가 발생할 수 있다.

  10. merge

    • 원격 저장소 브랜치와 병합, 로컬 브랜치 사이의 병합에 사용된다.

    • 주로 특정 기능을 추가할 때 로컬에서 feat/Comment 와 같은 브랜치를 만들고 해당 브랜치에서 작업을 한뒤 commit 까지 마무리하면 다시 이전의 브랜치로 돌아와서 git merge feat/Comment 로 작업사항을 merge 한다.

  11. stash

    • 마지막 커밋을 기준으로 변경된 사항을 잠시 어딘가에 저장하고 싶을 때 사용할 수 있다.

    • git stash 를 이용하면 Modified, Staged 상태의 변경사항을 스택에 저장한다.

      • ‼️ Untrakced 파일은 스택에 저장하지 않는다.

    • 그러면 언제 stash 를 주로 사용하는가?

      • 현재 브랜치에서 어떤 작업을 하고 있는데, 현재의 작업을 마무리하지 않은 상태로 다른 브랜치의 작업을 해야하는경우. stash 를 이용해서 현재의 작업 내용을 stash 스택에 저장하면 현재 브랜치는 마지막 커밋의 상태로 돌아가게 된다. 변경사항만 stash 스택에 저장되게 된다.

    • git stash list 를 통해 stash 리스트에 저장된 내용들을 볼 수 있다.

    • git stash pop 를 통해 가장 마지막으로 stash 스택에 들어온 내용을 가져올 수 빼올 수 있다.

      • ‼️ stash 로 스택에 변경사항을 push 한 저장소와 pop 하는 브랜치가 달라도 된다

  12. rebase

    • 커밋의 base 를 다시 정하는 작업이다.

    • 일반적으로 git merge 명령어로 두 브랜치를 병합하게 되면 log 가 꼬여버리는 상황이 발생한다.

      • 그동안 쌓아왔던 내 브랜치의 commit 로그 중간중간 merge 된 브랜치의 커밋 로그가 들어옴

    • rebase 를 사용하면 깔끔한 커밋 히스토리를 남길 수 있게 된다.

    • 사용법

      1. develop 브랜치와 새로운 기능을 추가한 feat/comment 브랜치가 있다고 하자. 이 feat/comment 브랜치 작업이 마무리 되서 develop 브랜치에 합쳐야 하는 상황.

      2. git rebase <병합 목적 브랜치> <병합 시킬 브랜치> 으로 rebase 를 시킨다.

        • git rebase develop feat/comment

      3. git checkout develop

      4. git merge feat/comment 이렇게 깔끔한 히스토리가 만들어지게 된다.

    • 원리

      1. git rebase develop feat/comment 명령어를 입력하면 아래와 같은 동작이 실행된다.

        1. git checkout feat/comment 를 통해 HEAD를 feat/comment 로 이동시킨다.

        2. develop 브랜치와 feat/comment 브랜치의 공통 조상이 되는 커밋부터 feat/comment 브랜치의 모든 커밋에 대해 diff 를 하고 그 차이(변경사항) 을 로컬에 저장한다.

        3. 이 결과로 develop 브랜치의 앞에는 feat/comment 에서의 변경사항이 추가되게 된다. fetch 와 비슷하게 명목상으로 된 상태고 병합은 아직 되지 않은 상태다.

      2. git checkout develop && git merge feat/comment 를 하면 병합이 되고 히스토리가 깔끔하게 한줄로 만들어짐

커밋 변경

커밋 변경은 아래와 같은 상황에서 사용할 수 있다.

  • 커밋에 포함되어야 하는 변경사항을 add 하지 않은 상태에서 commit 한 경우

  • commit 메세지를 잘못 작성한 경우 등...

커밋 변경은 크게 바로 직전 커밋과 직전이 아닌 커밋 변경으로 나누어진다.

직전의 커밋을 수정

  1. commit 메세지 만을 수정

    • git commit --amend

  2. 변경사항을 추가

    • git add <file> && git commit --amend

직전이 아닌 특정 커밋을 수정할 경우

  1. git log 를 통해 수정하고 싶은 커밋의 이전 커밋의 id 를 복사한다.

  2. git rebase -i <commit id> 를 입력하자.

    • 무엇을 어떻게 해야하는지에 대한 설명이 간략하게 나와있다.

  3. 변경하고 싶은 커밋을 찾고 pick 을 edit 으로 바꾼뒤 wq 로 저장하고 나오자

    • 여러 커밋을 edit 해도 된다.

  4. edit 으로 설정된 커밋 중에서 가장 오래전 커밋부터 수정하면 된다.

  5. 수정사항을 추가한 뒤 git add ... && git commit --amend 로 커밋을 하자.

  6. 이후에는 git rebase --continue 명령어로 다음 edit 으로 가면된다. 만약 마지막 edit 이었다면 기존에 작업중이던 브랜치로 돌아오게 된다.

깃 브랜칭 전략

큰 틀로써 master, develop, release 세 브랜치가 존재한다. 그리고 개발자들은 자신이 맡은 기능에 따라 임시로 브랜치를 만들고 관리하게 된다.

  1. master

    • 한 스프린트가 끝나면 각 스프린트의 내용을 master 에 합친다.

    • 다음 스프린트는 master 브랜치에서 develop 을 따고 시작한다.

  2. develop

    • 실제 개발을 진행하는 브랜치.

    • 스프린트가 끝나면 develop 브랜치에 머지한다.

    • 깃허브의 기능을 이용하기 위해서는 해당 브랜치를 디폴트 브랜치로 설정하는게 좋다.(자동으로 issue 클리어 해줌)

  3. release

    • master 에서 출시 할 수 있는 버전이 있으면 release 로 만든다.

    • 출시된 버전이 없다면 release 브랜치는 없어도 된다.

  4. 임시 브랜치

    • feat/..., fix/... 임시로 만들어지는 브랜치들은 브랜치 이름으로 브랜치의 목적을 명확히 알 수 있게 만든다.

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.Notion
노션에 정리해 놓은거 가져옴
Logo
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e7eac72b-030f-4dc6-b759-b6e8e1a7cf2f/Screen_Shot_2021-06-23_at_11.53.31_AM.png
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a4c58c5e-202e-4850-ba8a-102bbef1b554/Screen_Shot_2021-06-23_at_12.31.50_PM.png