일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬무료강의
- MongoDB
- ㅐㄱ이
- 프로그래머스입문
- 스파르타
- GIT
- error
- 장고 다중이미지
- 프로그래머스
- 개인정보수집유효기간
- python
- React
- SEF2022
- 22938번
- 장고이미지처리
- css
- 참가후기
- sql
- html
- 코딩기초트레이닝
- 프론트엔드
- 반응형
- jquery
- 무료강의
- django multi image
- 파이썬
- useState
- 네이버커넥트재단
- 20492번
- 스파르타코딩클럽
- Today
- Total
코딩,해볼까
04.12. Git과의 전쟁 / 풀 리퀘스트(Pull Request)와 git add, commit, push 되돌리기의 모든 것 + 원 저장소의 브랜치를 가져오는 방법 해결! 본문
04.12. Git과의 전쟁 / 풀 리퀘스트(Pull Request)와 git add, commit, push 되돌리기의 모든 것 + 원 저장소의 브랜치를 가져오는 방법 해결!
떠굥 2023. 4. 12. 23:580. 오늘 한 일
장고 초급 2~3강 복습하면서 views.py와 urls.py 수정.
html url 구조 생각하기.
base.html 수정.
깃허브 풀 리퀘스트 연습.
👩💻 풀 리퀘스트(Pull Request) 방법
- 기여하려는 저장소를 내 계정으로 포크(fork)
- 나의 리포지토리에 있는 포크(fork)한 저장소를 클론( $ git clone - )
- $ git checkout -b [생성하고자 하는 브랜치 이름]
새로운 브랜치 생성 후 이동 - 작업 후 git diff 로 작업 내역 확인 가능
- $ git push origin cheese origin
원격 저장소에 (새로 만든) cheese 브랜치를 푸시 - 깃허브에 가면 cheese had recent pushes ~ Compare & Pull request 버튼이 생겼다. 클릭. 브랜치 —> 브랜치 선택을 잘 해준 후 create pull request 누르면 끝!
1. 문제점
풀 리퀘스트 중에 오류가 꽤 발생했다.
내가 포크(fork) 해왔던 우리 팀 프로젝트 원본 저장소에서 팀장님이 새 브랜치를 생성하였다.
이 브랜치를 내가 포크한 저장소에도 가지고 오려고 synk fork를 통해 업데이트를 시켰으나 브랜치는 나타나지 않았다.
2. 시행착오
💻 블로그를 찾아보니 upstream 을 하면 된다고 하여 시작된 시행착오.
- upstream을 시도하니 터미널에서 새로운 브랜치까지 조회되었다.
- 내가 원래 하던 작업물을 병합하지 않은 상태에서 upstream을 시도하였더니 충돌이 일어난 것으로 보인다. upstream 도 push 까지의 과정을 거쳐야 하는데, 이미 스테이징된 나의 작업물들이 있었기 때문.
- 이전 커밋 삭제, 커밋 되돌리기, 브랜치 삭제, 브랜치 강제 삭제 등을 진행하였는데, 이전에 있었던 작업물을 없애지 못했다. pull request를 보내서 close 해보기도 했다. 하지만 나의 깃에서는 해결이 되지 않았다.
🚫 풀 리퀘스트(Pull Request) 취소하는 방법
- 풀 리퀘스트를 받은 관리자가 close를 눌렀더니, 나에게 되돌아오지 않았다.
(단, 관리자는 나의 풀 리퀘스트를 살려서 merge 시킬 수도 있다.) - git checkout [브랜치 이름]
git push origin --delete [브랜치 이름]
git push origin [브랜치 이름]
풀 리퀘스트 취소를 시도하였는데 (브랜치가 원격 저장소에서 삭제..?)
아무것도 없는 풀 리퀘스트가 하나 더 생겼다. 아무튼 이 방법은 못쓸 듯 하다.
🚫 git add, git commit, git push 취소하는 방법
- git add 되돌리기 : $ git reset HEAD 파일명
- git commit 되돌리기
[방법 1] commit을 취소하고 해당 파일들은 staged 상태로 워킹 디렉터리에 보존
$ git reset --soft HEAD^
[방법 2] commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에 보존
$ git reset --mixed HEAD^
$ git reset HEAD^
$ git reset HEAD~2
[방법 3] commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에서 삭제
$ git reset --hard HEAD^ - git push 취소하기
가장 최근의 commit을 취소 ( --mixed)
$ git reset HEAD^
목록 확인 후 원하는 시점으로 되돌리기
$ git reflog
$ git log -g
$ git reset HEAD@{number}
$ git reset [commit id]
** git status : 상태 체크 / git log commit : commit 목록 확인 / git commit -amend : 커밋 메시지 변경
TIP. git reset 명령은 아래의 옵션과 관련해서 주의하여 사용해야 한다.
reset 옵션
–soft : index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존.
–mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션)
–hard : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소.
TIP. 만약 워킹 디렉터리를 원격 저장소의 마지막 commit 상태로 되돌리고 싶으면, 아래의 명령어를 사용한다. 단, 이 명령을 사용하면 원격 저장소에 있는 마지막 commit 이후의 워킹 디렉터리와 add했던 파일들이 모두 사라지므로 주의해야 한다.
워킹 디렉터리를 원격 저장소의 마지막 commit 상태로 되돌린다.
$ git reset --hard HEAD
원격 저장소에 강제로 push 한다.
$ git push origin [branch name] -f 또는 $ git push origin +[branch name]
// Ex) master branch를 원격 저장소(origin)에 강제로 push $ git push origin +master
TIP. 경고를 무시하고 강제로 push 하기
[방법 1] -f 옵션 –force 옵션과 동일하다.
[방법 2] +[branch name] 해당 branch를 강제로 push한다.
untracked 파일 삭제하기 git clean 명령은 추적 중이지 않은 파일만 지우는 게 기본 동작이다. 즉, .gitignore 에 명시하여 무시되는 파일은 지우지 않는다.
$ git clean -f // 디렉터리를 제외한 파일들만 삭제
$ git clean -f -d // 디렉터리까지 삭제
$ git clean -f -d -x // 무시된 파일까지 삭제
TIP. option -d 옵션 디렉터리까지 지우는 것
-x 옵션 무시된 파일(.DS_Store나 .gitignore에 등록한 확장자 파일들) 까지 모두 지우는 것
// Ex) .o 파일 같은 빌드 파일까지도 지울 수 있다.
-n 옵션 가상으로 실행해보고 어떤 파일들이 지워질지 알려주는 것
💻 upstream 관련 블로그
[git] github 협업을 위한 fork 부터 upstream 설정까지.
[Git] Fork 한 repository 최신으로 동기화하기
3. 해결방법
결국은 브랜치를 삭제하고 다시 만들었으며, 이 문제의 해결방법은 찾지 못했다.
내일 튜터님에게 질문하려고 한다.
+ 4월 13일 포크한 저장소의 새로운 브랜치를 가져오는 방법.
git remote add upstream [오리지널 저장소]
// 오리지널 저장소를 upstream 으로 추가
git remote -v
// 추가가 잘 되었는지 확인. 터미널에 브랜치 이름들이 나열된다.
git fetch upstream
// 새로운 브랜치들을 [upstream/브랜치 이름(1)] 으로 가져온다.
git checkout [브랜치 이름(1)]
// 가져온 브랜치로 이동
git push origin [브랜치 이름(1)]
// 내 리포지토리에 반영
"git checkout feed" 명령어 실행 시 오류 : git checkout --track origin/feed 으로 해결
$ git checkout --no-guess feed
+ 추천해준 다른 방법들
1. checkout.defaultRemote 설정 변경하기: Git 구성에서 checkout.defaultRemote 값을 변경하여 원격 추적 브랜치의 기본 원격 리모트를 설정할 수 있습니다. 예를 들어, "origin" 리모트를 기본 원격 리모트로 설정하려면 다음과 같이 입력합니다 : git config --global checkout.defaultRemote origin
2. 원격 추적 브랜치명 변경하기: 만약 여러 개의 원격 추적 브랜치와 일치하는 경우, 각 원격 추적 브랜치의 이름을 변경하여 충돌을 해결할 수도 있습니다. 예를 들어, "feed"라는 이름의 원격 추적 브랜치 중 하나를 "origin/feed"로 변경하고 싶다면 다음과 같이 입력합니다 : git branch -m feed origin/feed
4. 알게된 점
풀 리퀘스트에 조금씩 익숙해지고 있다.
깃허브 오류는 대부분 오류를 차근차근 읽어나가면 방향이 있다. (하지만 이 오류를 처음 마주하게 되면 빠르게 서치하여 빠져나가기는 힘들었다.)
'Back > TIL' 카테고리의 다른 글
04.14. 팀 과제 마무리 (0) | 2023.04.14 |
---|---|
04.13. Pull Request (0) | 2023.04.14 |
04.11. HoIT! : Django 팀 과제 진행 (0) | 2023.04.11 |
[programmers] 입문 : 암호 해독 (+ 2h) (0) | 2023.04.11 |
04.10. [B5] HoIT! 프로젝트 / 팀 장고 : 분노의 예비 개발자 (0) | 2023.04.11 |