프로그래밍

git 활용법 모음

채윤아빠 2019. 6. 27. 11:56
728x90
반응형



저장소 관리

빈 저장소 생성

git init --bare

로컬의 저장소 복제 (clone)

다음과 같이 원격의 저장소를 복제할 수 있습니다.

$ git clone ~git/repo/kernels/dev
$ git remote -v
origin  /home/git/repo/kernels/dev/ (fetch)
origin  /home/git/repo/kernels/dev/ (push)

저장소 경로 뒤에 특정 폴더를 지정하여 복제하면, 해당 폴더로 저장소의 소스가 복제됩니다.

$ git clone ~git/repo/kernels/dev /home/dev/kernels/

원격 저장소 추가 (add)

git remote add <name> <URL>

최초 git clone를 한경우에 "origin"라는 이름으로 원격저장소가 추가됩니다.
신규로 추가하는 원격 저장소의 이름은 "origin"을 제외하고 입력하여 추가 가능합니다.

소스 버전 관리

현재 폴더의 변경된 모든 내용을 추가하기

git add -A .

현재 폴더의 변경된 내용 확인하기

git status

참고 : How to make git mark a deleted and a new file as a file move?

git 환경설정

전역 정보 확인

git config --global --list

전역 사용자 정보 설정

git config --global user.name Wonhee Han
git config --global user.email hbesthee@gmail.com

git 저장소 URL 변경하기

git 저장소 URL에서 서버가 "172.16.111.17"로 지정되어 있는 것을 "172.16.112.72" 번으로 서버를 변경하는 방법은 다음과 같습니다.

먼저 현재 저장소의 URL을 다음과 같이 확인합니다.

$ git remote -v 
origin  ssh://git@172.16.111.17/home/repo/private/hanwh/kernels2.git (fetch)
origin  ssh://git@172.16.111.17/home/repo/private/hanwh/kernels2.git (push)

set-url 명령을 이용하여 저장소의 URL을 다음과 같이 수정합니다.

$ git remote set-url origin ssh://git@172.16.112.72/home/repo/private/hanwh/kernels2.git

다음과 같이 변경된 저장소 URL을 확인할 수 있습니다.

$ git remote -v
origin  ssh://git@172.16.112.72/home/repo/private/hanwh/kernels2.git (fetch)
origin  ssh://git@172.16.112.72/home/repo/private/hanwh/kernels2.git (push)

$ git push origin

또는 remote origin 저장소를 삭제하고, 새로운 저장소를 origin으로 추가할 수도 있습니다.

$ git remote remove origin
$ git remote add origin ssh://git@172.16.112.72/home/repo/private/hanwh/kernels2.git

GitLab의 다음 두 저장소 주소는 동일합니다.

git@gitlab.my.domain:web/wapi-v1.1.git
ssh://git@gitlab.my.domain/web/wapi-v1.1.git

"ssh://"가 유용한 경우는, 외부로 공개된 SSH port가 일반적인 22번 포트가 아닌 경우에 사용합니다.
아래는 SSH port가 일반적인 22번 포트가 아닌 9022 포트를 이용할 경우에 사용하는 저장소 주소입니다.

ssh://git@gitlab.my.domain:9022/web/wapi-v1.1.git

브랜치 관련

브랜치 새로 만들기

$ git branch <new_branch_name>

현재 브랜치 목록 확인하기

$ git branch

브랜치로 전환하기

$ git checkout <branch_name>

master 브랜치로 병합하기(merge)

$ git checkout master
$ git merge <branch_name>

특정 브랜치 삭제하기

$ git branch -d <branch_name>

Trouble-shooting

push 했을 때, "No refs in common and none specified; doing nothing."라고만 나올 때

"No refs in common and none specified; doing nothing."와 같은 로그가 나타나는 이유는 저장소 상에 아직 master 브랜치가 작성되지 않았기 때문입니다.
push 할 때의 인수가 생략된 경우 기본적으로 원격 저장소와 로컬 저장소 양쪽에 모두 존재하는 브랜치가 push의 대상이 됩니다. 따라서 원격 저장소에 존재하지 않는 브랜치를 push하는 경우에는 저장소와 브랜치를 명시적으로 지정할 필요가 있습니다.
push할 때, "git push -u origin master"와 같이 처음 한번 실행하면 master 브랜치가 만들어지게 됩니다.
이후의 push에서는 저장소와 브랜치의 지정을 생략할 수 있고, 이경우 master 브랜치로 push 됩니다.

참고 : https://backlog.com/git-tutorial/kr/reference/trouble-shooting.html

수정된 소스를 이전 상태로 강제로 되돌릴 때

git reset --hard HEAD~

git pull시 "refusing to merge unrelated histories" 오류 발생 문제

git 저장소를 변경한 이후에 "push"를 하려고 하였을 때, 다음과 같은 오류가 발생합니다.

$ git push --set-upstream origin master
To ssh://172.16.112.72:9922/webbuilder/docker/site_script.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://git@172.16.112.72:9922/webbuilder/docker/site_script.git'
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.

이 후, 신규 저장소의 내용을 가져오기 위하여 "git pull"을 하면 다음과 같은 오류가 발생하는 경우가 있습니다.

$ git pull origin master
From ssh://172.16.112.72:9922/webbuilder/docker/site_script
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

기존 저장소와 신규 저장소간의 기록(history)이 서로 달라서 발생하는 문제입니다. 
git에서는 서로 관련 기록이 없는 두 프로젝트를 병합할 때 기본적으로 거부하도록 되어 있습니다.
"--allow-unrelated-histories" 옵션으로, 이것을 허용해 주면 문제를 해결할 수 있습니다.

$ git pull origin master --allow-unrelated-histories
From ssh://172.16.112.72:9922/webbuilder/docker/site_script
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 README.md | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 README.md

$ git push --set-upstream origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 339 bytes | 339.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To ssh://172.16.112.72:9922/webbuilder/docker/site_script.git
   abafab1..7b3247d  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.