Git / Github 공부정리
원격환경과 로컬환경을 구분한다.
원격환경 = Github
로컬환경 = 내 컴퓨터
1. 팀원이 수정한 코드를 받아올 때
(1) 처음이라서 새 파일에 clone 해서 받는 경우 -> 로컬(노트북)에 빈파일 생성 -> vscode에 열기 -> git clone 프로젝트코드링크 . -> 로컬에서 코드 수정 -> branch 확인하고 add, commit, push ->
push 할 때 다른사람이 내가 코드를 수정하는 동안 아무 commit을 올리지 않은 경우 -> 그냥 그대로 진행함
push 하려하는데 다른 사람이 내가 코드를 수정하는 동안 또 다른 commit 을 한 경우 -> git pull origin release(브랜치명) 해서 원격환경의 최신업데이트 git pull 코드 당기고 적용시키기 & 컨플릭트 있으면 해결하기 -> git push
(2) 처음이 아니라서 내 로컬에 이미 작업파일이 있는 경우 -> git pull origin release -> 로컬에서 코드수정 ->
push 할 때 다른사람이 내가 코드를 수정하는 동안 아무 commit을 올리지 않은 경우 -> 그냥 그대로 진행함
push 하려하는데 다른 사람이 내가 코드를 수정하는 동안 또 다른 commit 을 한 경우 -> git pull origin release(브랜치명) 해서 원격환경의 최신업데이트 git pull 코드 당기고 적용시키기 & 컨플릭트 있으면 해결하기 -> git push
++ 추가사항
git pull origin release = release 라는 branch에서 당겨오기
git pull origin = ?
원격환경과 로컬환경을 연결해주는 변수가 있다. (현재는 origin)
// 변수 상태 확인 //
git remote -v
git remote -v
origin https://github.com/dancinncoder/B_team_five_website.git (fetch)
origin https://github.com/dancinncoder/B_team_five_website.git (push)
위 처럼 코드가 나오면 'origin'이라는 이름을 가진 원격환경과 로컬환경을 연결해주는 매개체 변수가 있다는 것을 확인할 수 있다.
원격환경과 로컬환경을 연결해주는 변수를 새로 하나 추가할 수도 있다.
// 변수 새로 추가//
git remote add origin_test(예시) 깃허브프로젝트레포지토리코드복사링크 .
git remote add origin_test https://github.com/dancinncoder/B_team_five_website.git .
ihamin@ihamin-ui-MacBookAir B_team_five_website % git remote -v
origin https://github.com/dancinncoder/B_team_five_website.git (fetch)
origin https://github.com/dancinncoder/B_team_five_website.git (push)
origin_test https://github.com/dancinncoder/B_team_five_website.git (fetch)
origin_test https://github.com/dancinncoder/B_team_five_website.git (push)
원격환경과 로컬환경을 연결해주는 변수를 삭제할 수 있다.
// 변수 삭제//
git remote remove origin_test(예시)
git remote remove origin_test
ihamin@ihamin-ui-MacBookAir B_team_five_website % git remote -v
origin https://github.com/dancinncoder/B_team_five_website.git (fetch)
origin https://github.com/dancinncoder/B_team_five_website.git (push)
origin_test 매개체 변수를 지정하여 지워서, git remote -v 를 통해 현황을 보면 origin 밖에 남아있지 않다.
현재 나의 로컬 환경이(노트북 또는 PC) 연결되어 있는 branch가 무엇인지 확인
// 로컬환경이 연결되어 있는 branch 확인//
git status
git status
On branch release 현재 'release'라는 branch에 연결되어 있다는 뜻이다.
nothing to commit, working tree clean
현재 나의 로컬 환경이(노트북 또는 PC) 연결되어 있는 branch를 다른 브랜치로 이동하기
// 로컬환경이 연결되어 있는 현재 branch 에서 다른 branch 로 이동 //
git checkout main(예시: 브랜치 이름)
checkout = 이동해라
git checkout main
Switched to branch 'main'
Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
ihamin@ihamin-ui-MacBookAir B_team_five_website % git checkout dev
branch 'dev' set up to track 'origin/dev'.
Switched to a new branch 'dev'
++ 업데이트
Git 2.23이 출시되면서 checkout의 일부 기능이 switch와 restore로 분리되었다.
따라서 아래와 같이 상황에 맞게 쓰면 된다.
git checkout = tree-ish를 처리하기 위한 고급 옵션
git switch = branch 전환(이동)
git Restore = commit 복원 을 사용하는 것을 권장한다.
한 branch 에서 팀원들과 협업하다 꼬인 경우 -> 새 branch를 만들어 그곳으로 이동한다
// git checkout -b release1(예시이름)
git checkout -b release1
Switched to a new branch 'release1'
ihamin@ihamin-ui-MacBookAir B_team_five_website % git status
On branch release1 현재 새로만든 release1 이라는 branch에 로컬환경이 연결되어 있음
시나리오 (1)
위와 같이 새 branch를 만들고 -> 내 로컬(노트북)환경이 새로 만든 branch에 연결한다.
-> 이제 로컬에 있는 내 프로젝트에서 코드 수정
-> add (stage 하기) git add .
-> commit git commit -m "fix"
-> push git push origin release1 (이 단계를 해야만 원격환경인 github에 반영이 된다. 중요)
git status
On branch release1
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
ihamin@ihamin-ui-MacBookAir B_team_five_website % git add .
ihamin@ihamin-ui-MacBookAir B_team_five_website % git commit -m "fix"
[release1 180f66a] fix
1 file changed, 1 insertion(+), 1 deletion(-)
ihamin@ihamin-ui-MacBookAir B_team_five_website % git push origin release1
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 286 bytes | 286.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
remote:
remote: Create a pull request for 'release1' on GitHub by visiting:
remote: https://github.com/dancinncoder/B_team_five_website/pull/new/release1
remote:
To https://github.com/dancinncoder/B_team_five_website.git
* [new branch] release1 -> release1
시나리오 (2)
팀원입장: 새 branch로 올려진 코드를 받아서 수정해서 다시 push 해야 하는 경우
Github Repository Project Code Link 복사 -> 빈 파일(새파일) 만들어서 vscode에 넣기
-> Terminal 열어서 git clone Github Repository Project Code Link
-> git status 입력새서 현재 로컬이 연결되어 있는 branch가 무엇인지 확인
-> 코드 수정
-> 이제 branch 변경해야 하는데 git switch 또는 git checkout 또는 아래 사진과 같이 vscode 하단클릭 후 목적지 branch 클릭.
-> branch 이동이 완료되었다면 이제 -> git add .
-> git commit -m "fix"
-> git push origin release
Git 기록보기
// git log
OR
// git log --oneline
https://velog.io/@jiiiiinni/Git-GitHub-push%ED%95%9C-commit-%EC%82%AD%EC%A0%9C
ihamin@ihamin-ui-MacBookAir B_team_five_website % git pull origin main
From https://github.com/dancinncoder/B_team_five_website
* branch main -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
ihamin@ihamin-ui-MacBookAir B_team_five_website % git config pull.rebase false
ihamin@ihamin-ui-MacBookAir B_team_five_website % git config pull.rebase false
ihamin@ihamin-ui-MacBookAir B_team_five_website % git pull origin main
From https://github.com/dancinncoder/B_team_five_website
* branch main -> FETCH_HEAD
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Auto-merging style.css
CONFLICT (content): Merge conflict in style.css
Automatic merge failed; fix conflicts and then commit the result.
ihamin@ihamin-ui-MacBookAir B_team_five_website % git add .
ihamin@ihamin-ui-MacBookAir B_team_five_website % git commit -m "code merge"
[detached HEAD 4e990d9] code merge
ihamin@ihamin-ui-MacBookAir B_team_five_website % git push origin main
To https://github.com/dancinncoder/B_team_five_website.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/dancinncoder/B_team_five_website.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and 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.
ihamin@ihamin-ui-MacBookAir B_team_five_website % git pull
From https://github.com/dancinncoder/B_team_five_website
* [new branch] dev -> origin/dev
You are not currently on a branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
ihamin@ihamin-ui-MacBookAir B_team_five_website % git pull main
fatal: 'main' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
ihamin@ihamin-ui-MacBookAir B_team_five_website % git pull origin main
From https://github.com/dancinncoder/B_team_five_website
* branch main -> FETCH_HEAD
Already up to date.
ihamin@ihamin-ui-MacBookAir B_team_five_website % git add .
ihamin@ihamin-ui-MacBookAir B_team_five_website % git commit -m "merge"
HEAD detached from d0e4216
nothing to commit, working tree clean
ihamin@ihamin-ui-MacBookAir B_team_five_website % git add .
ihamin@ihamin-ui-MacBookAir B_team_five_website % git commit -m "merge1"
[detached HEAD 600406c] merge1
1 file changed, 45 deletions(-)
ihamin@ihamin-ui-MacBookAir B_team_five_website % git push origin main
To https://github.com/dancinncoder/B_team_five_website.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/dancinncoder/B_team_five_website.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and 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.
ihamin@ihamin-ui-MacBookAir B_team_five_website % git log
commit 600406ce7d3e97c5f1e06ffdcbf320484eec0b6d (HEAD)
Author: Hamin Lee <whereanna7@gmail.com>
Date: Fri Oct 6 10:22:53 2023 +0900
merge1
commit 4e990d9a283b5c45be2ac494eae34b23c4c09d1e
Merge: d4cea6a 8549b4e
Author: Hamin Lee <whereanna7@gmail.com>
Date: Fri Oct 6 10:07:29 2023 +0900
code merge
commit d4cea6a9e26b06bd139d6f511ae8f8d2887ceaf1
Author: Hamin Lee <whereanna7@gmail.com>
Date: Fri Oct 6 09:45:44 2023 +0900
지훈님과 code merge
commit 8549b4e25d04c07713a12cccd24fad67a393e712 (origin/main, origin/dev)
Author: Hamin Lee <whereanna7@gmail.com>
Date: Thu Oct 5 18:22:27 2023 +0900
배경화면추가 및 팀원소개 토글기능
commit d0e4216d255c12195a6ec364bf32e758a6d4f1ee (main)
Author: volant97 <volant97@naver.com>
Date: Thu Oct 5 12:59:16 2023 +0900
commit 600406ce7d3e97c5f1e06ffdcbf320484eec0b6d (HEAD)
Author: Hamin Lee <whereanna7@gmail.com>
Date: Fri Oct 6 10:22:53 2023 +0900
merge1
commit 4e990d9a283b5c45be2ac494eae34b23c4c09d1e
Merge: d4cea6a 8549b4e
Author: Hamin Lee <whereanna7@gmail.com>
Date: Fri Oct 6 10:07:29 2023 +0900
code merge
commit d4cea6a9e26b06bd139d6f511ae8f8d2887ceaf1
Author: Hamin Lee <whereanna7@gmail.com>
Date: Fri Oct 6 09:45:44 2023 +0900
지훈님과 code merge
commit 8549b4e25d04c07713a12cccd24fad67a393e712 (origin/main, origin/dev)
Author: Hamin Lee <whereanna7@gmail.com>
Date: Thu Oct 5 18:22:27 2023 +0900
배경화면추가 및 팀원소개 토글기능
commit d0e4216d255c12195a6ec364bf32e758a6d4f1ee (main)
Author: volant97 <volant97@naver.com>
Date: Thu Oct 5 12:59:16 2023 +0900
-----------------
ihamin@ihamin-ui-MacBookAir B_team_five_website % git checkout -b 이름(ex.release)
이동한다 없으면 만들어라, 새브랜치를! 뭘 기준으로? 지금 로컬환경에 있는 main 브랜치 기준으로부터 소스코드를 복사해서 만는 것.
Switched to a new branch 'release'
ihamin@ihamin-ui-MacBookAir B_team_five_website % git remote -v
현재 로컬과 원격 연결 매개체인 'origin'이라는 이름의 매개체의 상태 체크
origin https://github.com/dancinncoder/B_team_five_website.git(fetch)
origin https://github.com/dancinncoder/B_team_five_website.git(push)
ihamin@ihamin-ui-MacBookAir B_team_five_website % git remote add origin2 https://github.com/dancinncoder/B_team_five_website.git
ihamin@ihamin-ui-MacBookAir B_team_five_website % git remote -v
origin https://github.com/dancinncoder/B_team_five_website.git (fetch)
origin https://github.com/dancinncoder/B_team_five_website.git (push)
origin2 https://github.com/dancinncoder/B_team_five_website.git (fetch)
origin2 https://github.com/dancinncoder/B_team_five_website.git (push)
ihamin@ihamin-ui-MacBookAir B_team_five_website % git remote remove origin2
ihamin@ihamin-ui-MacBookAir B_team_five_website % git remote -v
origin https://github.com/dancinncoder/B_team_five_website.git (fetch)
origin https://github.com/dancinncoder/B_team_five_website.git (push)
ihamin@ihamin-ui-MacBookAir B_team_five_website % git push origin release
새로 만든 브랜치를 원격으로 올리기
Enumerating objects: 16, done.
Counting objects: 100% (16/16), done.
Delta compression using up to 8 threads
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 1.22 KiB | 1.22 MiB/s, done.
Total 10 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), completed with 3 local objects.
remote:
remote: Create a pull request for 'release' on GitHub by visiting:
remote: https://github.com/dancinncoder/B_team_five_website/pull/new/release
remote:
To https://github.com/dancinncoder/B_team_five_website.git
* [new branch] release -> release
ihamin@ihamin-ui-MacBookAir B_team_five_website %
나머지 사람이 로컬에 원격에 있는 릴리즈 브랜치를 가져와야 함.
그 다음에 코드 수정해서
릴리즈 브랜치로 연결해서 push
'부트캠프 개발일지 2023-2024 > Git & Github' 카테고리의 다른 글
[Git/Github] 다른사람의 React+yarn 파일을 내 로컬에서 작업하고 싶을 때 (0) | 2023.11.10 |
---|---|
[4주차] git/github : 협업시 내 로컬에서 다시 수정후 올릴때 (1) | 2023.10.26 |
[4주차] git/github 특강 2 (0) | 2023.10.24 |
[2주차] Git / Github 이슈 기록 (0) | 2023.10.10 |