Tech Log

[Git] push 본문

Git

[Git] push

yuhee kim 2022. 6. 9. 17:48

다들 처음 git commit을 하고, push를 해줄 때 git push -u origin branch-named에서 -u라는 옵션을 본 적이 있을 것이다.

-u 옵션 뿐만 아니라, 다른 옵션도 있는데 이게 무슨 명령을 의미하는 것인지 궁금했다. 따라서 git push cli에 대해서 전체적으로 다뤄보기로 했다.

 

 

1. git push란?

git commit 을 하고나서, 로컬 저장소에 변경 이력이 저장이 된다.

이후에 git push를 하게 되면 로컬 저장소에 있는 변경 이력이 원격 저장소에도 반영된다.

 

2. 사용 방법

git push (원격 저장소 명) (브랜치 명)

 

일반적으로 git push는 두 가지 인자를 받는다.

원격 저장소 명과 브랜치 명을 두 가지 인자로 받는다.

 

git push origin main

 

위 cli는 main 브랜치의 변경 이력을 origin(원격 저장소)에 올리겠다는 의미가 된다.

 

원격 저장소 명이 origin이 아닐 수도 있는데, 원격 저장소 명을 확인하고 싶다면 아래 명령어를 통해 알 수 있다.

 

git remote

 

3. git push 옵션

3.1. git push -u 옵션 사용

 

git push를 할 때 매번 원격 저장소 명과 브랜치 명을 입력해야 하는 것은 아니다.

git push를 하면서 -u 옵션을 사용해주었다면, 두 가지 인자(원격 저장소 명, 브랜치 명)은 생략해도 된다.

 

git push -u origin main

 

처음에 push를 할 때 위와 같이 입력해주었다면,

다음에 push 할 때는 아래와 같이 간략하게 입력해주어도 된다.

 

git push

 

-u 옵션으로 원격 저장소 명과 브랜치 명 인자를 생략할 수 있게 되었다.

이 옵션을 적용 함으로써, 앞으로 git push할 때는 원격 저장소에 변경 이력을 자동으로 연결하게 된 것이다.

 

git push -u origin main

 

위와 같은 cli를 실행하고 난 뒤에 git push를 한다면,

origin과 main 이 두 가지 인자를 생략해도 자동으로  main 브랜치의 변경 이력이 원격 저장소에 있는 main에 반영된다.

 

3.2. git push -f 옵션 사용(주의)

 

git push에 -f 옵션을 주게 되면, 코드 변경 이력을 강제로 원격 저장소에 반영할 수 있다.

원격 저장소에 있는 커밋 내역의 Flow와 로컬 저장소에 있는 커밋 내역의 Flow가 맞지 않더라도 강제로 덮어쓸 수 있게 하는 옵션이다.

 

이 옵션은 협업할 때는 매우 주의해서 사용해야 하는 옵션이다.

팀원이 이미 원격 저장소에서 변경 이력을 내려받았을 경우,

-f 옵션을 적용해서 git push를 해버린다면 나중에 팀원이 git push를 할 때 충돌이 발생할 것이다.

따라서 개인 프로젝트나 해결책이 이 방법 밖에 없는 경우 이외에는 -f 옵션을 사용하지 않는 것이 좋다.

 

git push -f origin main

 

-u 옵션과 비슷하게 위와 같이 명령어를 작성해준다.

 

번외.  옵션 없이 git push 인자 생략

이 방법은 git config 파일의 설정 값을 수정하면 사용할 수 있는 방법이다.

3.1.의 git push -u과 마찬가지로 이 방법을 사용하면 인자를 생략할 수 있다.

 

git config 파일의 설정 값들은 아래 명령어를 통해서 확인할 수 있다.

 

git config --list

 

그리고 위에서 설정 값을 확인할 필요 없이 그냥 아래 명령어를 통해 git push를 인자없이 실행할 수 있다.

git config --global push.default current

 

위 명령어는 push.default 값을 cuurent로 설정하는 것이다.

이렇게 설정해주고 git push하면,

현재 브랜치를 기준으로 현재 브랜치와 이름이 같은 원격 저장소의 브랜치에 자동으로 연결이 되어 push가 된다.

 

 

git을 처음 사용했을 때 굉장히 복잡하게 느껴졌던 기억이 있다.

지금도 물론 복잡한 감이 있지만, 많이 쓰고 공부하다보니 조금씩 나아지는 게 느껴지는 것 같기도? 하다.

push 같이 필수적으로 쓰이는 git cli는 이렇게 개념을 자세하게 공부할 필요가 있는 것 같다.

 

참조
Comments