xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

mac OS를 카탈리나에서 빅서로 업데이트한 이후에 

git 명령어를 사용하려고 했더니, 위와 같은 오류가 뜨며 작동하지 않았다.

 

검색해보니 다음 커맨드로 XCode를 재설치하면 해결된다고 하였다.

xcode-select --install

터미널에 git을 쳐보면 잘 작동하는 것을 알 수 있다. 

로컬의 파일들을 깃허브 저장소로 push 하는 경우에 아래와 같은 오류가 뜨는 경우가 있다.

$ git push origin master
To https://github.com/nuatmochoi/wifi-collector
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/nuatmochoi/wifi-collector'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

push하기 전에 pull을 통해 프로젝트를 병합하는 과정이 필요하다.

아래와 같은 메세지와 함께, pull 명령이 작동하지 않는다면,

fatal: refusing to merge unrelated histories

--allow-unrelated-histories 옵션을 통해 해결 가능하다.

신규 프로젝트와 기존 프로젝트가 같은 조상을 보고 있기 않기 때문에, git은 본질적으로 다른 프로젝트로 인식하고, 이것을 허용하며 병합시키는 데 사용되는 옵션이다.

git pull origin master --allow-unrelated-histories

git commit 취소하기

  1. commit 취소 후, staged 상태로 working directory에 유지
    git reset --soft HEAD^ 
  1. commit 취소 후, unstaged 상태로 working directory에 유지
    git reset --mixed HEAD^  - 기본 옵션

    git reset HEAD^  - 위와 동일

    git reset HEAD~3  - 마지막 3개의 commit을 취소
  1. commit 취소 후, unstaged 상태로 working directory에서 삭제
    git reset --hard HEAD^ 

commit message 변경하기

git commit --amend

 

 

git clone -b (브랜치 이름) --single-branch (저장소 url)

 

 

https://www.gitignore.io/

 

프로젝트를 진행하면서, 팀원에게 자잘한 (자잘하지 않을 수도 있는) 지식을 배웠다.

 

.gitignore 이란 git으로 버전 관리를 진행하면서, 원치않는 파일을 올리지 않게끔 도와주는 도구이다.

이전까지는 필요하지 않은 파일에 대해서 하나하나 직접 작성해가며 필터링하였는데,

팀원이 gitignore.io 라는 사이트가 있다는 것을 알려주었다.

 

IDE, 언어, 운영체제 등을 tag로 입력하면 그에 맞는 .gitignore 파일을 자동으로 생성해준다.

매우 편리!

git flow에 관한 전체적인 도식

 

  • master branch : 배포되었거나, 배포될 소스가 저장되는 branch

  • develop branch : 마일스톤마다의 배포를 위한 개발을 진행하는 branch

  • feature branch : 각 개발자에 의해 기능 단위 개발이 진행되는 branch (ex> create-crawler)

    → 개발이 완료되면 develop branch로 merge되고, 해당 branch는 삭제한다.

  • release branch : 내부적으로 배포할 준비가 되었다고 생각되는 소스가 저장되는 branch

    → 요구되는 기능을 개발하고, 배포하기 전에 테스트를 거치는 소스가 저장된다.

  • hotfixs branch : 배포 버전에 생긴 문제로 긴급한 수정이 필요할 때 개발이 진행되는 branch

    → 배포된 master branch에서 새로운 hotfixs 브랜치를 생성하고, master 브랜치에 merge, 출시 버전에서 생긴 문제는 develop branch에도 적용되어야 한다.

 

+ Recent posts