Skip to content

Instantly share code, notes, and snippets.

@Curookie
Last active April 4, 2025 10:42
Show Gist options
  • Save Curookie/151e07edea64bb5ced248c54e13d1e74 to your computer and use it in GitHub Desktop.
Save Curookie/151e07edea64bb5ced248c54e13d1e74 to your computer and use it in GitHub Desktop.
GIT 사용법

전반적인 기능

  1. 공유 할 필요 없는 파일들을 제외 시키는 .gitignore 을 .git에 등록해야한다.
  • github에서 생성 시 언어별/ 프로젝트 별로 적용할 수 있게 제공한다.
  • 플랫폼 별 구글링하면 나온다.
  1. 병합 Merge
// 항상 시작 전 Fetch나 Pull로 원격저장소 내용 로컬에 동기화  
git fetch / git pull  

git cherry-pick <태그이름> 커밋만 가져와야할때 해당 라인이 문제가 있을때 매우 

// 기억해야할 것은 병합할 브랜치로 checkout 가서 작업 진행 main에 jobA, jobB를 merge할 경우 main으로 가기  
git checkout main  

//merge 해서 충돌 시 선택해 처리  
git merge origin/jobA  
git merge origin/jobB  

//머지할때 commit massage 안남게 할경우 --no-commit 해야함
git merge --no-commit

//머지할때 상대 브랜치에 있는 커밋에 checkout 안하고 머지하고 싶을 때
git merge commitHash코드 4글자 쓰면됨 ex)git merge cad3
cad39992d 이면 cad3  될때 전체 hash  쓰면 .

//Push 하기
git push origin main
  1. 충돌 Conflict
    일단 용어
    Current 기존꺼 (내가 수정한거)
    Incomming 머지하러 가져온거 (남이 수정한거)
    Combination/Both 둘 다 모두 적용하기
충돌 시 GUI 같은 경우 editor를 열어서 충돌 난 부분을 선택하는 과정을 거치면 됨.  
이때 소통이 필요할 수 있다.  
  1. 현재 로컬(Local)을 원격저장소(Origin)으로 온전히 동기화 시키고 싶을 때
git fetch --all --prune
// fetch --all 원격 저장소에 있는 모든 변경사항을 가져오는 거
// --prune 원격 저장소에 없는 내용을 지워버리는 기능
  1. 마지막에 올린 Commit이 잘못 된 경우
  • [CASE 1] push는 안했고(Origin적용 No) commit을 했는데 파일을 더 추가하고 싶은 상황 혹은 커밋 메시지만 바꾸고 싶을 떄
    파일 ADD 후 git commit --amend -m "수정된 메시지"
  • [CASE 2] push가 이미 된 파일을 수정해야할 경우
git rebase HEAD~[거슬러 올라가고 싶은 커밋 수] -i

git rebase HEAD~1 -i // 예를 들어, 바로 전 커밋의 메세지를 재작성하길 원한다면

화면에 나오는 pick -> reword로 변경 (i키 누르면 입력가능)
:wq로 편집기를 빠져나옴
reword로 바꿨던 커밋들이 순서대로 나옴 메시지 수정
:wq로 저장
   
pick 7c65355 Task 1/3  
squash 2639543 Task 2/3  
squash d442427 Task 3/3  

squash로 커밋내용 합칠수도 있다.  

-- git push -f / git fetch && git merge --squash


// github에 강제 push (내 원격저장소 내용으로 덮어쓰기 때문에 조심해야함)
git push -f

// 특정 브랜치에 올릴때
git push origin [브랜치명] -f

※ 주의사항: rebase로 커밋 내용을 바꿀경우 commit id와 시간이 달라짐.
직전에 올린 경우는 크게 문제가 되지 않지만 만약 5개전 커밋내용을 바꾼다고 했을때 1~5번까지 commit id와 시간이 바뀌기 때문에 다른사람들과 협업시에는 문제가 생길수 있음.
직전 커밋정도가 아니면 최대한 사용을 피하는게 좋음.

  1. 모든 id를 볼 수 있는 거 이상한 브랜치에 커밋 했던거 찾을 때 필요
    git reflog

  2. 이미 다 push한 파일이 원격저장소에 남아있을경우 .gitignore에 적어도 계속 업데이트 된다. 따라서 원격저장소에 올라간 파일 제거하는 방법

// 원격 저장소와 로컬 저장소에 있는 파일을 삭제한다.  
$ git rm [File Name]  
// 원격 저장소에 있는 파일을 삭제한다. 로컬 저장소에 있는 파일은 삭제하지 않는다.  
$ git rm --cached [File Name]
따라서 아래와 같이 git rm –cached [File Name] 명령어를 이용하여 원격 저장소에서 잘못 올라간 파일을 삭제해야 한다.

// .idea/modules.xml 파일 삭제
$ git rm --cached .idea/modules.xml
// .idea 폴더 하위의 모든 파일 삭제 
$ git rm --cached -r .idea/
  1. 매우 유용한 팁!! 보통 merge conflict 시 한쪽으로 하는 경우가 많음

[Accept All Incoming Change] 변경된 커밋 부분으로 모두 대체 (점도 찍어야함)

git checkout --theirs . 
git add .

[Accept All Current Change] 기존 커밋 내용으로 모두 대체 (점도 찍어야함)

git checkout --ours .  
git add .  
  1. VSCode 에서 git 사용 시 팁 ; 이거 쓰면 cmd 커맨드 라인에서 커맨드 연결해서 쓸 수 있음. ex) git pull ; git merge 깃 풀한다음 머지하기

  2. git checkout - git checkout - - 마지막으로 접속한 branch로 이동 - 의 의미가 바로직전이므로 다른 커맨드에서 응용 가능

Unity 프로젝트

  1. 스마트 병합 적용하기
  • Unity는 씬과 프리팹 파일을 구문상 올바르게 병합할 수 있는 UnityYAMLMerge라는 툴을 내장
//.gitignore 에 추가
# Smart Merge
[merge]
tool = unityyamlmerge

[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

//<path to UnityYAMLMerge>는 UnityYAMLMerge의 경로로 바꿔줘야 한다. (\\ 이거 두개 써야하는거 인지) 
//Unity Hub를 쓴다면 C:\\Program Files\\Unity\\Hub\\Editor\\(유니티 버전)\\Editor\\Data\\Tools\\UnityYAMLMerge.exe, Unity Hub를 안 쓴다면  
//C:\\Program Files\\Unity\\Editor\\Data\\Tools\\UnityYAMLMerge.exe일 것이다.  
//EX) cmd = 'C:\\Program Files\\Unity\\Hub\\Editor\\2021.3.9f1\\Editor\\Data\\Tools\\UnityYAMLMerge.exe' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

// 이부분 안해도 됨
// root에 아래 내용대로 .gitattributes 파일 만들기
// *.cs diff=csharp text
// *.cginc text
// *.shader text
// *.unity merge=unityyamlmerge eol=lf
// *.prefab merge=unityyamlmerge eol=lf
// *.mat -merge eol=lf
// *.anim -merge eol=lf
// *.physicMaterial -merge eol=lf
// *.physicsMaterial2D -merge eol=lf
// *.asset -merge eol=lf
// *.meta -merge eol=lf
// *.controller -merge eol=lf
// *.spriteatlas -merge eol=lf


유니티 Project Settings > Editor와 Version Control에서 체크
- Asset Serialization mode : Force Text  
- Version Control mode : Visible Meta Files   


  1. 유니티 내에서 제공하는 Plastic SCM을 사용하는것도 방안

GUI 툴 추천 [2023.01 기준]

  1. SourceTree
  2. Git Desktop
  3. VS Code Extension [Only 개발자 추천]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment