git

Steve·2021년 9월 26일
0

basic flow

  1. git clone
  2. git branch feature/login
  3. git checkout feature/login
    (branch 파고 이동 동시에 하는 건
    git checkout -b feature/login
    (working...)
  4. git add . <-- 이 관리를 안함
  5. git commit -m "blablabla"이걸 안하면 git
    Add : ~~
    Modify : ~~
  6. git push origin master -> remote에도 feature/login이 생김
  7. PR(Pull Request) : PR template 작성
    Project manager가 "Ok 수락!" 하면 리모트에 있는 master는 최신화 됐지만, 로컬의 master는 아직 최신화 안된 상태
    (리모트의 master에 있는 내용을 로컬로 가져와야함)
    (현재 feature/login에 있는 상태라 로컬의 master로 경로 바꿔줘야함)
  8. git checkout master
    (이제야 비로소 pull 땡겨오면됨)
  9. git pull origin master
  10. 2번 과정처럼 git branch feature/main 과같은 새로운 파일 생성 시작 이런 flow로 계속 흘러감

Team project

github에 westagram이라는 repository 만든다.
1. 한개의 컴퓨터에서 CRA settings를 한다

  • npx create-react-app westargram // 질문 이명령어에서 westagram은 깃헙에 만들어 논 폴더명과 일치를 시켜야하는가?
  • git add .
  • git commit -m "Add : initial settings complete"
  • git remote add origin "연결할 주소" <- 연결할 주소를 앞으로 origin으로 부르겠다.
  • git push origin master : origin에 master의 내용을 올리겠다.
  • git push origin feature/main : origin에 feature/main의 내용을 올리겠다.

node.moudules는 너무 무겁기 대문에 .gitignore에 올려서 깃헙에 안올린다.
package.json을 git push origin master를 통해 올리게됨.
다른 팀원들의 컴터에서 git clone
각각의 컴퓨터에서 npm install명령어를 이용해 package.json안의 dependcies를 읽어서 node_modules를 다운받음

각자의 작업시작

나는 로그인 맡았으니까 git branch feature/login
나는 메인 맡았으니까 git branch feature/main


Conflict 해결법

  1. git branch feature/main
  2. git checkout feature/main
    (working...)
  3. git add .
  4. git commit -m "Add : main page complete"
    ( 다른 팀원이 다른 작업(ex. login page)을 먼저 끝낸 후 push 한 상황!)
  • git push origin feature/login
  • PR까지 올려서 merge 까지 한상황 -> remote에 있는 master는 최신화됨!

중간 질문)
다른 팀원이 feature/list라는 파일을 만들어서 push하고 merge요청한거고
나는 feature/main라는 파일을 만들어서 push 후 merge요청한건데

만약 같은 파일이 같은 라인을 둘다 각각의 아이디어로 수정한 상황에 conflict발생
리모트 입장에선 어떤 변경사항을 받아들여야 하는지 모름.
이 상황을 해결하기 위해선 최신화된 remote의 master을 가져와야함
5. git pull origin master -> 나의 로컬 마스터도 최신화 됨
6. git checkout feature/main
( 병합이 이뤄지려고 할 때 충돌이 일어남)
7. git merge master <- 이때 충돌이 나냐/ 안나냐 파악됨

  • (현재 feature/main에다가 로컬의 최신화된 로컬 마스터 내용을 가져오겠다 명령)
    (working... 수정수정 문제되는 코드부분 수정수정..)
  1. git add .
  2. git commit -m "Fix : conflict resolved"
  3. git push origin feature/main

실제 conflict 발생시켜보기

  1. git branch feature/googoo
  2. git checkout feature/googoo
  3. (예를드는 거니까) name.md 파일의 첫번째 줄을 I'm kang 을 I'm googoo로 바꾼다
  4. git add .
  5. git commit -m "Add : first line changed->> googoo"
  6. git push origin master

  1. 다른 사람이 자신의 브랜치를 판다
  • git branch feature/sky
    git checkout feature/sky
  1. 충돌을 일으키려고 하는거니까 아까 name.md건든 부분을 똑같이 건들여 준다.
    I'm kang을 뭐 I'm zoozoo로 바꾼다.(다른놈은 I'm googoo로 바꾼걸 모른다.)
  2. git add .
  3. git commit -m "Add : first line changed->> zoozoo"
  4. git push origin master
  5. 자 이제 합쳐달라고 Pull Request를 올려보자. 근데..!
    googoo가 조금더 손이 빨랐네?( 매니저에 의해 confirm merge로 merge먼저됨)
    googoo는 리모트의 마스터에 merge된 상황
  6. 뒤늦게 zoozoo도 합쳐달라고 merge요청 보냄

경고 문구!!💢💢 "This branch has conflicted that must be resolved"
Conflict files
name.md
googoo와 zoozoo가 같은 파일의 같은 라인을 건드렸기 때문에 발생한 상황!!
문제생겼으니까 해결해야지!!

merge가 된 것을 로컬의 마스터로 일단 가져온다.

📌여기서 질문이 생겼었다.

그냥 feature/zoozoo로 바로 git pull origin master하면 안되는건가?
그렇게 해서 conflict해결하면 되자나?
당장은 해결 될것이다.
하지만!
나중에 로컬의 master에서
git branch 뭐시기,
git branch 저시기 같이 계속 만들때마다 '최신화'가 안된것으로 작업을 하게 되는것이기 때문에 local의 master에서 pull origin master을 해줘야한다.

1) git checkout master
2) git pull origin master

*문제가 생긴 부분을 해결 하기 위해선 병합을 해야 확인할 수 있다.
3) 내 브랜치(feature/zoozoo)로 마스터의 변경된 이력을 나한테 병합해줘야한다.
4) git checkout feature/zoozoo
5) git merge master -> 마스터에 있는걸 나한테 병합시킨다
->>> 이때!! 문제가 되는 부분이 나온다.

6) 손수 문제가 되는 부분을 일단 해결해주고 나중에 익숙해지면 단축탭을 이용한다.
7) 문제가 되는 부분을 수정해준뒤,
8) git add .
9) git commit -m "Fix : conflict resolved"
10) git push origin feature/zoozoo

commit간의 이동
git log로 commit 번호 확인 후,
git checkout history의 7자리 입력하면 그때 시점으로 넘어감
git checkout 1b75dac

commit 1b75dac597ff0a22d084996a6f3000ddf34cb9cf
Author: ksung91889 <ksung91889@chosunbiz.com>
Date:Mon Apr 25 14:20:13 2022 +0900

github에 push하기전에
파일은 유지하되 커밋내용 삭제하고싶으면

git reset 해당해시숫자(6개이상이면 상관없음)
-> 입력한 해시 커밋이후로 한것들 다 제거됨.(최신 파일은 유지상태) 다시 커밋해주셈 예쁜이름으로.ㅇㅇ

git commit -am "입력하세요 커밋하고싶으면"
: add와 commit을 동시에 할 수 있음.

profile
Front-Dev

0개의 댓글