github 흐름 및 충돌[TIL 12일차]

JUNGHUN KIM·2021년 6월 25일
0
post-custom-banner

github 흐름

순서는 상기 이미지의 번호와 같음.

  1. 오픈소스 remote repository를 pork하여 내 remote repository에 가져옴
  2. 코드 수정을 위해 내 컴퓨터로 clone함
git clone <내 remote repository주소>

3.내 local repository에서 작업한 파일을 add하여 staging area에 올림

git add .

4.staging area에 들어온 파일을 commit

git commit -m "메모"

5 commit한 파일을 내 remote repository로 push

git push origin main(master)

6.내 remote repository에서 오픈소스 remote repository로 Pull request(PR)을 요청

**번외

git restore

변경된 사항을 폐기할때 쓰는 명령어
커밋되지 않은 Local Repository의 변경사항을 폐기 할수 있음

git restore <파일명>

git log

현재까지 commit된 내역들을 터미널 창에서 확인할수 있는 명령어

git status

내 로컬의 staging area, untracked files목록을 확인 할수 있음
파일 생성부터 commit직전까지의 파일들의 현황을 볼수 있는 커맨드

git의 세가지 영역

  • unmodified : 기존에 Commit했던 파일을 수정하지 않은 상태
  • Modified : 기존에 Commit하였던 파일을 수정한 상태
  • Staged : commit이 가능한 상태 commit하기위해서는 먼저 staged area에 add가 필요.
  • untracked : 아직 staged area가 이 파일을 눈치채지 못한 상태 (이제 막 파일을 만든 단계)

git reset / resert

staged area에서 commit한 요소들을 취소할때 사용

git reset

commit을 취소 할 수 있으나 보험없이 다 날려버리기 때문에 사용에 주의
git reset HEAD^: 가장 최신의 commit을 취소가능 ^는 1을 의미 ^^를 사용하면 2로 인식
git reset [abcdef] --hard : abcdef위에 있는 모든 commit을 다 날려버림

git revert

세이브 포인트를 만들어서 세이브 포인트 이전의 commit으로 돌리는 동작
git revert [abcdef] : [abcdef]가 세이브 포인트이고 세이브 포인트 -1의 commit상태로 돌림



github 공동 작업

흐름

특정 오픈소스를 기반으로 두명의 개발자가 공동작업을 한다고 가정

  1. 오픈소스의 remote repository를 각각의 개발자의 github에 fork
  2. fork한 소스를 clone하여 자기 local repository에 가져옴
  3. pair와 나의 repository를 연결하는 작업이 필요 연결은 remote 명령어를 사용
git remove add pair <pair의 깃허브 repository URL>

연결 이후 remote -v로 제대로 연결되었는지 확인
4.먼저 코드를 작성한 사람이 commit후 작업한 코드를 자신의 remote repository에 push함
5.pair가 먼저 작업한 코드를 받기 위해서는 pull로 먼저 코드작성한 사람의 remote repository에서 자신의 local repository로 파일을 가져옴
6.그 이후 pair가 다시 코드를 작성하여 수정한 내용을 commit 및 push하여 자신의 remote remote repository에 저장
7.마지막으로 최초 코드 작성한 사람이 pair가 작성한 코드를 자신의 local repository로 pull하여 가져옴

병합(merge), 충돌(conflict)

병합

공동 작업중 pull로 상대방 remote repository에서 코드를 가져오게 되면 자신의 local repository에 있는 파일들과 자동으로 병합(merge)됨. 페어의 작업을 받아오는 와중에 페어와 내가 동일한 라인을 수정한 파일이 있다면 자동 병합(merge)가 실패하고되고 충돌이 발생

충돌

pair와 공동으로 작업을하게 될경우 동일한 파일의 동일한 열을 작성 및 수정하여 merge할경우 서로 겹치는 부분이 충돌하여 에러가 발생
git status 명령어를 통해 어떤 파일이 충돌하고 있는지 확인 가능.

위의 사진의 HEAD는 내가 수정한 내용이고 아래 있는 내용은 페어가 수정한 내용이며
이때 내가 수정한 내용으로 파일을 반영할지, 페어가 수정한 내용으로 파일을 반영할지, 둘다 반영할지에 대한 결정이 필요.

Accept Current Change:내가 수정한 내용으로 파일에 반영
Accept Incoming Change:Remote Repository(pair) 내용으로 파일에 반영할 수 있음
Accept Both Changes: 변경 사항 모두를 반영합니다.

수정을 마치면 병합 커밋(merge commit)을 생성해 주기 위해서 파일을 staging area로 add후 commit,push하면됨.

profile
개발자가 되고 싶은 일문학도
post-custom-banner

0개의 댓글