일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- vue 이벤트 수신
- netlify redirect
- vuex map
- KDT 프로그래머스
- 폼 입력 바인딩
- SCSS use
- 프로그래머스 데브코스 프론트엔드
- 고양이 사진 검색기
- nextjs사용법
- SCSS import
- 프로그래머스 프론트엔드 데브코스
- 쌓임맥락
- Spacer
- SCSS extend
- Vue
- 프로그래머스 K_Digital Training
- postcss
- 다른컴퓨터에서 git사용
- vue 지역 컴포넌트
- intersection opserver
- react next
- 리액트
- 리스트 렌더링
- KDT 프로그래머스 데브코스 프론트엔드
- git 같은계정 다른 컴퓨터
- vue mixin
- 프로그래머스 데브코스
- 이벤트 수식어
- flex
- SCSS forward
- Today
- Total
혼자 적어보는 노트
[Git] pull / push / fetch 다루기 + 충돌 해결 본문
[push / pull / fetch]
push
commit한 내용을 원격저장소에 올리기
git push
강제 push
원격저장소의 내용을 로컬저장소와 일치하도록 덮어씌우기
*협업 시에는 꼭 상의 후 진행
git push --force
git push -f
pull
원격 저장소의 커밋들을 로컬로 가지고 올 때 사용.
- 원격 저장소의 최신 커밋들을 로컬저장소로 가지고와서 merge 또는 rebase 할 수 있음
- fetch로
git pull
* 협업 시 원격에 적용된 새 버전을 pull로 받고 push를 해야한다.
📌 협업 시 상황에 따른 pull 사용
상황 1.
팀원A가 원격에 push한 상태지만
나는 아무 작업도 하지 않은 상태
git pull
내 로컬에 변화가 없다면 pull을 받은 후 작업하면 된다.
상황 2.
팀원A가 원격에 먼저 push를 한 상태 (업데이트 된 상황)에서
내 작업을 commit하고 puch하려는데 에러메세지가 발생
error: failed to push some refs to 'https://github.com/jinist94/git-test.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
pull을 사용하여 원격의 최신 업데이트 내역으로 맞춤과 동시에
내가 push할 내역들 또한 맞춰주어야 한다.
merge를 이용한 방식
git pull // pull 입력 시 merge로 진행
git pull --no-rebase
reabse를 이용한 방식
git pull --rebase
❗ 상황3. 충돌 해결
같은 파일의 같은 위치에 변경사항이 있을 경우 충돌 발생
팀원A가 friend.txt 파일을 수정하여 push
나도 friend.txt 파일을 전체 수정하여 commit을 한 상태.
push가 되지 않아 pull을 했는데 충돌 발생.
충돌이 되던 부분 수정 및 저장 후 해당 파일을 stage에 올린다.
git add [충돌되던 파일명]
rebase로 진행했을 경우 아래의 명령어로 REBASE 진행 및 commit
git rebase --continue
// continue진행 시 자동으로 커밋 에디터로 이동
merge로 진행했을 경우 commit
git commit
커밋 완료 후 push하면 내가 push한 커밋과 원격에 있는 커밋들이 맞춰진다.
fetch
원격저장소에 있는 변경사항들을 로컬 저장소에 가져오기만 하고 merge나 rebase는 하지 않는다.
* 즉 변경한 내용을 가져와서 병합하는게 아닌 변경한 내역들을 확인 할 때 사용
📌 fetch 사용상황 예시
다른사람과 원격저장소를 이용할 때 profile.txt 파일을 push를 하고
이후에 profile.txt파일을 누군가가 수정했는지 확인하고 싶을 때.
1. fetch를 하여 내용을 확인한다.
git fetch [원격저장소 이름]
//예시
$ git fetch origin
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 697 bytes | 63.00 KiB/s, done.
From https://github.com/jinist94/git-test
c87c221..0be77c7 main -> origin/main
위와 같이 맨 하단에 commit한 내용이 보여진다.
2. 해당 원격 저장소의 해당 브랜치로 checkout 하기.
git checkout [원격저장소 이름]/[원격 브랜치 이름]
//예시
git checkout origin/main
3. 현재 원격브랜치 확인 시 현재 브랜치가 원격 브랜치임을 알 수 있다.
$ git branch -a
* (HEAD detached at origin/main)
main
new-branch
remotes/origin/main
remotes/origin/new-branch
4. 이 상태에서 profile.txt 파일을 확인해보면 원격 브랜치의 profile.txt파일이 연결되어 있으니
해당파일을 확인할 수 있다.
5. 해당 원격 브랜치의 커밋상황을 볼 수도 있다.
git log
git log를 통하여 원격 브랜치의 히스토리 정보도 확인할 수 있다.
commit 0be77c74e40fa48daa2d582b9e5f975bd315319f (HEAD, origin/main)
Author: jinist94 <81489300+jinist94@users.noreply.github.com>
Date: Sat Feb 5 04:30:31 2022 +0900
Update Profile
commit c87c221dd5ae42b666f6050f5ad5350cbb3dffa9 (origin/new-branch, new-branch, main)
Author: jinist94 <81489300+jinist94@users.noreply.github.com>
Date: Fri Feb 4 03:14:14 2022 +0900
Add profile
commit의 맨 오른쪽을 보면 fetch한 commit이 어느 브랜치에 적용되어 있는지 확인할 수 있다.
즉, 내가 push한 이후에 누군가가 commit - push를 했는지 알 수 있다.
이렇게 원격브랜치의 파일 및 커밋내역을 확인하여 파일을 병합할 지 말 지 확인을 할 수 있는 것이다.
6. 다시 로컬 브랜치로 이동하여 pull을 어떤 방식으로 할 지 결정해준다.
git switch main
git pull
📌 fetch 사용상황 예시2
원격저장소에 누군가가 new-branch를 추가하고 push하였는데
해당 브랜치를 확인하거나 내 로컬 저장소에도등록해야할 때
1. fetch를 사용하여 추가된 브랜치를 확인한다.
$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 693 bytes | 69.00 KiB/s, done.
From https://github.com/jinist94/git-test
* [new branch] new-branch -> origin/new-branch
2. 전체 브랜치를 확인하여 원격의 브랜치를 확인한다.
$ git branch -a
* main
remotes/origin/main
remotes/origin/new-branch
3. 새로 생긴 원격의 new-branch를 확인만 해보고 싶다면 아래의 명령어로 확인.
git checkout origin/new-branch
4. 현재 브랜치가 로컬 저장소인 상태에서
아래의 명령어로 원격 저장소에 있는 new-branch를 로컬에 new-branch 추가한다.
git switch -t origin/new-branch
❗ 알아야 할 점.
fetch 전에 pull을 해버리면 git fetch를 했을 경우 아무 내용도 나타나지 않는다.
pull에는 fetch의 기능인 "원격 저장소에서 내용을 가져오는 일"이 포함되어 있기 때문에
pull을 했을 경우 2번부터 진행하면 된다.
'기타' 카테고리의 다른 글
[Git] rebase -i를 이용한 커밋(commit) 삭제/수정/병합/분할 (0) | 2022.02.07 |
---|---|
[Git] 브랜치 다루기 2 - HEAD (0) | 2022.02.05 |
[Git] 브랜치 다루기, 충돌 해결 / branch / merge / rebase (0) | 2022.02.04 |
[Git] commit, reset 되돌리기 - reset / revert / conflict / reflog (0) | 2022.02.03 |
[Git] Git의 공간 다루기 / commit / add / diff / stash (0) | 2022.02.03 |