github 사용법

YEONGHUN KO·2022년 11월 1일
1

GIT

목록 보기
1/2
post-thumbnail

이때까지 작업하면서 배웠던 깃헙 기술을 여기 적어보려고 한다.

깃헙 에디터를 vscode로 열고 싶을때

git rebase를 할때 vim으로 하니 불편했다. 그래서 vscode를 editor로 사용하려고 찾아본 결과 아래의 명령어를 입력하면 된다.
git config --global core.editor "code --wait"

git 커밋메시지 squash하고 싶을때

git 커밋메시지 수정: git rebase -i [바꾸고 싶은 커밋 범위] ex> HEAD~9
또는 git rebase -i [commit hash 번호]

그러고 나면 editor가 열릴것이다. 이때 squash로 변경해주면 끝!

만약 이미 remote에 push된 commit이라면 git push origin [branch 이름] -f 이런식으로 강제 push를 해주어서 commit history를 바꾸어 주어야 한다.

commit을 한쪽에 일단 분리해두고 싶을때

git stash: git stash
git stash목록 보기: git stash list
git stash 적용하기: git stash apply [list에 있는 인덱스 입력] ex> [0]

remote branch 당겨오기

git rebase origin/[main branch name] : main branch에 있는 걸 다 pull 해와서 up-to-date로 만듬

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 에러

password를 입력하는 란에 github에서 받은 token을 입력하면 된다
Password for https://github.com/xxxx
요때 token입력!

remote 변경

이미 등록된 remote 리포의 정보삭제(원격 리포를 삭제하는 건 아님)
git remote remove origin

현재 로컬 저장소의 remote 리포 정보 변경
git remote add origin https://github.com/계정/리포지토리

다른 remote branch에서 pull 하는 법

git pull origin <branch name>

remote에 내가 만든 branch가 없다?

couldn't find remote ref branch 에러가 났다. 즉 remote에 내가 만든 branch가 없다는 뜻.

깃헙 페이지에 보니깐 진짜 없다. 수동으로 해줘도 되지만 cli를 이용해서 local에서 branch를 등록하고 싶었다.

결론부터 말하면 git push -u origin <branch> 를 입력하라. -u는 --set-upstream 의 약자이다.

branch를 만들고 처음 push할때 remote에다가 local branch를 연결해줘야한다. upstream은 로컬과 연결된 원격 저장소를 의미한다.

즉 git push --set-upstream A B 를 하게 되면 로컬 A 저장소의 원격저장소를 B 로 지정하여 B 에 push 하라는 의미이다.

이렇게 이 명령을 한번 하게 되면 이제 원격저장소는 B 가 되기 때문에 다시 push 할 때 --set-upstream 을 쓰지 않아도 된다.

gitignore에 파일이 있는데도 git이 감지할경우

캐쉬를 삭제 해주고
git rm -r --cached .

다시 푸시를 해보자
git add -> commit -> push

refusing to merge unrelated histories에러

최초로 remote에서 pull할때 요런 에러가 났다

git pull origin 브런치명 --allow-unrelated-histories 를 입력해주자!

원래는, 서로 관련 기록이 없는 이질적인 두 프로젝트를 병합할때 기본적으로 거부반응을 일으킨다
위의 옵션을 그것을 허용해준다.

git 레포에서 모든 remote branch를 불러오고 싶을때

git fetch --all

git force pull 하고 싶을때

git reset --hard HEAD
git pull

This will remove all uncommitted changes and then pull

local에 있는것을 굳이 merge하지 않고 local에 있는게 모두 remote branch에 의해 덮어씌의게 하고 싶을때

you have not concluded merge commit

같은 메세지가 떴다. vscode상에는 분명 commit이 모두 완료되어있다.

결론은 CLI로 git add -> git commit을 해보라!

현재 local branch name을 바꾸고 싶을때

  • remote에 feat/complete 를 만들고 local에서 feat/complete로 checkout하고 작업하고 있었다. 근데 누가 remote의 feat/completefeat/creation-custom으로 바꾸어 놓았다. 이때 local에 있는 feat/completefeat/creation-custom 로 바꾸고 싶으면 어떻게 하는가?

현재 feat/complete 에 있는 것을 확인하고 아래 명령어를 입력한다.

git branch -m feat/creation-custom

참 쉽쥬?

새로운 branch를 로컬에서 만들고 싶을때

git checkout -b [새로운 브랜치 이름]

현재 존재하는 모든 브랜치 목록을 보고 싶을때

git branch -a

remote에 있는 브랜치를 만들었는데 이름을 잘못적어서 삭제하고 싶을때

만약에 로컬에 git checkout -b [new-branch] 로 브랜치를 새로 만들고 remote에 푸시 했다고 하자. 하지만 뒤늦게 브랜치 이름을 잘못알았다고 할때 어떻게 해야할까?

git branch -m old-name new-name으로 로컬 브랜치 이름을 바꾸고 git push origin --delete old-name 으로 리모트에 있는 잘못 입력된 브랜치를 삭제한다.

그리고 로컬에 브랜치를 새로 만든다음 remote에 publish 해주면 끝!

not possible to fast-forward?

두개의 브랜치가 있다고 했을때, linear 한 code history path에 있으면 fast-forward를 할 수 있다. (브랜치는 단순히 pointer에 불과하다)

그러나 pull하려는 리모트 브랜치에서 누가 push를 했고 내 로컬에서도 commit / push를 했을경우 동일한 선상에 있지 않기 때문에 rebase를 해야한다. 이때 컨플릭트가 나는데 잘 해결하고 난 뒤에 다시 commit을 하면 된다.

git pull origin master --rebase #master branch인 경우

만약 그래도 같은 에러가 나면 git config가 ff인경우일 확률이 높다. config를 해제해주자

git config --unset pull.ff

그리고 다시 pull을 하면 git config설정하라고 나올것이다 그때 git config pull.rebase false 라고 하고 다시 pull을 해보자

수시로 pull을 해서 최신 버전으로 로컬 브랜치를 유지해주자!

출처 :

다른 브랜치의 커밋을 적용하고 싶을때(cherry pick)

: 상용에서 이벤트 브랜치를 만들어서 컨펌을 받았다. 이제 master_native에 배포를 한다음 확인만 받으면 된다. 이때 이벤트 브랜치를 master_native에 머지하려고 하는데 behind되어있는게 너무 많아서 그냥 내가 작업한 커밋만 옮기려고 한다.

그러나 내가 작업한 코드를 일일이 복사 붙여넣기 하려면 너무 귀찮다. 그럴때 cherry pick이 아주 유용하게 쓰인다. 사용법은 매우 간단

git cherry-pick <commit hash>

commit hash를 여러개 뒤에 적용해주어도 된다.

fatal: bad object hash

로컬에 해당 커밋의 hash가 없어서 그렇다. 다시말해, 리모트에만 존재하고 로컬에는 존재하지 않아서 그렇다.

cherry pick하려는 브랜치를 최신버전으로 유지하라. 즉 그 브랜치로 가서 pull 받은 다음(그럼 로컬에 그 커밋이 존재하겠지) cherry pick 하면 잘 될거다.

또는 fetch를 하든가

출처: https://stackoverflow.com/questions/13788945/how-to-cherry-pick-from-a-remote-branch

git pull할때 유의사항

RQ_01 브랜치에서 작업하고 있었다. (브랜치는 이미 QR올라와있는 상태이다) 최신 사항을 반영하기 위해 develop브랜치를 pull받았다. 그런데 80개이상 컨플릭트가 나서 그거 다 해결해야하는 상황이었다...

근데 희한하게 PR에 올라와있는 conflict는 5개 정도 밖에 안되었다.

그래서 해결하고 remote RQ_01를 pull 하니깐 깔끔하게 최신 브랜치로 pull되었다.

그래서 담엔, develop을 바로 pull하지 말고 PR을 올리고 나서 깃헙 웹에서 해결을 해보자

로컬에 있는 브랜치를 없애고 싶을때

git branch --delete <branchname>

ssh에서 'git fatal: Exiting because of an unresolved conflict.'

step1. git fetch --all ( commit 내역(repository) 최신화 )

step2. git reset --hard origin/master ( head가 최신을 가르키도록 )

step3. git pull

출처: https://nohbj.tistory.com/77

profile
'과연 이게 최선일까?' 끊임없이 생각하기

0개의 댓글