Devlog👩🏻‍💻/etc

[GitHub] Pull Request 생성 및 DS_Store 파일 Confilct 해결

yujjne 2024. 3. 14. 12:31

 

내 프로젝트의 수정사항이 생겼을 때 push 하는 방법은 다음과 같다.

 

🔖 Git Branch 생성 후 push 하기

  1. git branch 브랜치명
  2. git checkout 브랜치명 
  3. git status로 변경사항 확인
  4. git add . (수정 사항 전체 add)
  5. git commit -m “메세지” 
  6. git log로 커밋 확인
  7. git push origin 브랜치명
  8. 코드 업로드 및 pull request 생성
  9. github에서 rebase&merge / merge
  10. 로컬에도 반영 : git pull origin main

원격 브랜치 확인

  • 원격 브랜치 확인 : git branch -r
  • 원격에 있는 브랜치로 변경 : git checkout -t origin/브랜치명

 

⚠️ 문제 발생

단순하게 위의 방식으로 작업을 진행중에 문제가 발생했다. 

  1. 브랜치로 푸시 후 pull request 생성 안됨
  2. 충돌 발생 : DS_Store, UserInterfaceState.xcuserstate 파일

 

1. Pull Requests 생성되지 않는 문제

수정 작업 후 브랜치로 푸시 후 자동으로 Pull Requests가 생성되지 않아서 당황했는데

이 때 해결법은 직접 생성해주면 된다!

 

 

  • 우측에 New pull request 버튼을 선택

 

 

  • compare 의 브랜치를 원하는 브랜치로 바꿔주고 merge 작업 진행하면 된다!

안 생긴 이유를 정확히는 모르겠지만 Github로 이동해서 바로 pr을 진행하지 않아서 활성화된 버튼이 자동으로 사라진 것 같았다.

아주 간단하게 해결할 수 있었다.

 

2. Pull Requests confilct 문제 / DS_Store, UserInterfaceState.xcuserstate  파일

push를 하는 과정에서 골치 아픈 충돌이 생겼다.

 

문제 상황

  • main으로부터 pull 을 받지 않고 push를 해버려서 시점이 엉켜버렸다.
  • update를 받지 않은 상태에서 add . 을 함으로써 DS_Store 파일에서 conflict 발생함
  • UserInterfaceState.xcuserstate 충돌

 

 

 

충돌 파일 

  • DS_Store
  • UserInterfaceState.xcuserstate

 

시도해본 것들

  • git ignore 파일 추가  (해당 줄 추가해줌)
.DS_Store
._.DS_Store
**/.DS_Store
**/._.DS_Store
*.xcuserstate
  • DS_Store 파일 삭제 
# 상위 디렉토리에서 현재 디렉토리 아래의 .DS_Store 파일 모두 제거
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
  • UserInterfaceState.xcuserstate 라는 파일 삭제
git rm --cached [Project Name].xcodeproj/xcuserdata/[User Name].xcuserdatad/UserInterfaceState.xcuserstate

 

 

이렇게 충돌이 나는 파일들을 삭제해줌에도 불구하고 push 후 pull request에서 충돌이 해결되지 않았다.

 

그 과정에서 파일을 지워도 계속 지워지지 않고 충돌이 나는 이유에 대해 고민해보았다.

이전 commit 상태에 파일이 남아있기 때문인 것 같았다..!

 

해결 방법 ⚙️

  1. main에 있는 충돌 파일을 직접 삭제 후 commit -> push
  2. main에 있는 충돌 파일들 생성되지 않도록 삭제 명령어 처리
  3. 충돌 파일이 생성이 되지 않기 때문에 conflict 발생 x

 

여러번 브랜치를 이동하며 명령어와 삭제 과정을 반복하면서 해결했다.

앞으로 .ignore을 통해 꼬옥 충돌 방지를 미리해줘야겠다는 생각이 들었던 충돌 해결과정 시간..😮‍💨 

 

 

앞으로 주의해야할 점❗️

  • gitignore 파일 추가하기!⭐️⭐️
  • 항상 git_status로 파일의 update 및 변경사항 확인하기
  • git commit시 add .로 모든 파일을 수정하기보다는 변경이 된 파일만 add하기
  • 바뀐게 많아서 add . 을 하게 됐을시는 git status로 modified 파일을 확인(빨간색은 적용X, 초록색은 적용O)
    • 빨간색 파일이 있으면 오류가 발생할 확률이 높음
    • 해결방법 : commit시 git stash 해두고 git add . 하면 불필요한 캐시파일이 add 되지않음
  • conflict 이 발생하면 GitHub에 버튼이 활성화 되지 않음
  • 터미널에서 conflict log 확인
    • 왜 오류가 났는지 디버깅 하고 오류가 난 부분 반드시 해결 후 다시 update, commit, push 순서로 진행하기

 

 

과제 기능 작업중에 Confilct 해결하느라 시간이 많이 지체됐지만 자꾸 부딪히며 깃허브와 친해지는 과정이라고 생각한다.

깃허브 관련 협업 과정도 더 연습하면서 익숙해지도록 공부해야겠다.