Git Commands 정리🧐

2021. 8. 10. 16:02Git 정리

[TOC]

Git 정리

#주요 Commands

소스코드의 origin 저장소를 초기화하고 remote 서버와 처음으로 연결할 때

  • 최초의 프로젝트(origin)는 로컬 저장소에서 시작될 것이다. 운영체제에 git을 설치하고 원격 저장소가 준비되었다고 가정할 때 아래와 같이 git init 명령을 통해 git 프로젝트로 초기화할 수 있다.
  • $ echo "# Hi" > README.md $ git init
#git add, commit
  • git add 명령어는 git flow의 첫 단계에 해당되며 인덱스에 새로운 파일이 생겼다는 것을 알리는 행위이다. 이 상태는 저장소에는 반영이 되지 않은 상태이며 git commit 명령을 통해 비로소 저장소에 변경내역이 반영된다.
    $ git commit -m "이 버전의 변경 내역에 대한 설명"
    • Git add, commit은 아래와 같이 동시에 실행 할 수 있다고 한다.
    • $ git commit -am "이 버전의 변경 내역에 대한 설명"
  • $ git add bulid.gradle # 특정 파일에 대한 변경 내역을 알린다. ( 하지만 나는 써본적이 없다는 사실...) $ git add . # 모든 변경 내영을 알린다.
#git push
  • commit이 완료된 시점은 변경 내용이 로컬 저장소에 HEAD안에 머물고 있음을 의미한다. 우리는 변경 내역을 동료들도 확인할 수 있도록 remote 서버에 반영할 필요가 있다.
  • $ git push origin master $ git push -u origin master $ git push # -u 옵션을 이용하면 다음 push때 이전 히스토리를 기억하고 반영한다.
#git pull
  • git add, commit, push 하는 과정은 내 컴퓨터에서 일어난 변경내역을 관리하고, remote 서버에 반영하는 행위라면 git pullremote 서버의 가장 최근의 변경 내역을 내 컴퓨터로 가져오는 행위이다.
  • $ git pull $ git pull <remote> <branch>

#새로운 기능을 위해 branch를 생성하는 방법


  • git의 강력한 점은 효율적으로 분산된 환경을 제공하는것이다. 우리는 master branch가 아닌 더욱 안정하고 격리된 상태에서 새로운 기능을 추가할 수 있다. 새로운 branch를 이용해서 개발을 진행하고 개발이 완료가 되면 나중에 master로 돌아와 merge 하는 프로세스이다.
  • 아래의 명령을 통해 master branch에서 develop 이라는 새로운 branch를 만들고 갈아탄다.stage라는 특정 branch로 부터 새로운 branch를 만들고 싶다면!!!또한 아래와 같이 다시 master branch로 돌아올 수 있다.
  • $ git checkout master$ git branch* master stage develop
  • $ git checkout -b develop origin/stage
  • $ git checkout -b develop
  • 내가 새롭게 만든 branch는 remote 서버에 전송하기 전까지는 동료들이 접근 x. branch에 대한 검증이 완료되면 여러분은 GitHub에서 Pull Request를 전송할 수 있게 된다.
  • $ git push -u origin develop
  • 만약 branch를 여러명과 협업하고 있는 도중 push시에 remote 서버의 최신내용을 로컬에 반영하지 않았다면 아래와 같이 remote 서버와 연결 후 git pull을 통해 merge한다.
  • $ git branch --set-upstream-to=origin/develop develop$ git pull

#원격 저장소의 기존 branch 확인 후 로컬에 가져오기


  • 원격 저장소의 브랜치 리스트를 조회한다.
  • $ git branch -r origin/develop origin/master origin/stage
  • 로컬, 원격 저장소의 브랜치 리스트를 모두 조회한다.
  • $ git branch -a master stage* develop remote/origin/develop remote/origin/master remote/origin/stage

원격 저장소의 develop 이라는 branch를 로컬 저장소에 가져오고 싶다면

$ git checkout -t origin/developBranch develop set up to track remote branch develop from origin.Switched to a new branch 'develop'$ git branch* develop    master    stage

fatal : Cannot update paths and switch to branch 'develop' at the same time. 이라는 에러가 발생한다면 아래와 같이 원격 저장소를 최신 상태 로컬 저장소로 갱신한다.

$ git remote update

#원격 저장소 참고하기


  • 어떤 경우에는 수정 내역을 원격 저장소에 push 하지는 않지만 해당 branch를 참고하기 위해 로컬에 받아서 테스트 해보고 싶은경우도 있다.( 이 부분은 다른 명령어가 있으니 참고만 해주세요 🤫. 다음 포스팅 때 알려드릴께요!!! )
    • 아무런 옵션없이 원격 저장소의 branch를 checkout 하면 detached HEAD 상태로 소스를 보고 변경 해볼 수 도 있지만 변경 사항들은 commit, push 할 수 없으며 다른 branch로 checkout하면 사라진다.
  • $ git checkout <branch>

#개발한 내역을 master branch에 merge하는 과정


  • 변경 내역을 mastermerge하는 과정은 아주 중요한 과정입니다! 먼저 아래와 같이 remote 서버의 최신 내역을 자신의 로컬 저장소에 갱신하는 습관을 들이는게 좋다. git pull 을 통해 remote 서버의 변경 내용이 로컬 저장소에 fetch, merge가 된다.
    • 다른 branch에 있는 변경 내용을 현재의 branch(master)에 병합하려면 아래의 명령을 실행.첫번째 , 두번째 명령에서 git은 자동으로 변경 내용을 merge하려고 한다. 문제는 항상 성공하는 게 아니라 가끔 충돌(conflicts)이 일어나기도 한다는 점이다. 필요하다면 개발이 완료되어 mergebranch는 아래와 같이 삭제한다.
    • $ git branch -D some_function
    • $ git checkout master$ git merge some_function
  • $ git pull

#merge conflict가 발생한다면...?


  • 개발이 완료되면 branch를 merge하는 과정에서 충분히 conflicts가 발생할 수 있다.
  • CONFLICT (content): Merge conflict in foo.java Automatic merge failed; fix conflicts and then commit the result.
  int a = 1;
  <<<<<<< HEAD // conflict 가 발생한 범위의 시작
  int b = 2;
  =======
  int b = 0;
  >>>>>>> 55737474728739293729138123737392371293123737e // 모든 commit은 유일한 커밋 ID를 가진다

conflicts 부분을 직접 수정해서 다시 commit하는 전략을 취한다.

  int a = 1;int b = 2;
  $ git commit -a -m 'Conclude merge'

#Merge 전에 변경 내용을 확인하는방법


$ git status -sb
$ git diff some_function master
  • merge 중에 발생한 충돌을 해결하는 방법은 몇 가지가 있다. 첫 번째는 그저 이 상황을 벗어나는 것이다. 예상하고 있던 일도 아니고 지금 당장 처리할 일도 아니라면 git merge -abort 명령으로 간단히 merge 하기전으로 되돌린다.
  • $ git merge --abort

#로컬 변경 내용을 되돌리기

  • 로컬에서 발생한 변경 내역을 되돌리는 일은 빈번히 발생할 수 있다. git status 명령을 통해 현재 branch의 상태와 이후의 상태 변경을 위한 Commands를 확인할 수 도 있다.
    $ git status
    On branch masterYour branch is up-to-date with 'origin/master'.Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
    modified: Git/git-commands.md​
     
    • 위의 상태는 소스코드를 변경하고 git add 를 통해 인덱스에 변경 내역을 알리기전의 상태이다. 아래와 같이 변경 내역을 되돌릴 수 있다.
    • $ git checkout -- <file>
    • git add 이후에 변경 내역을 되돌리고자 한다면,
    • $ git reset HEAD <file>
  • 이미 commit된 내역을 과거로 되돌리고 싶은 경우가 있을 것이다! 먼저 commit history를 살펴보자
    $ git log --oneline
    8ed5068 (HEAD -> unit-test, origin/unit-test) Update README.md
    dfff29e (origin/master, master) Merge pull request #8 from stunstunstun/unit-test
    eec3b7a Integration runner is completed
    0a087cf #2 Specification list, create, get, update
    a603da7 Inialize unit test environments55c3e73 (origin/stage, stage) Update README.md
    c354d50 Merge pull request #7 from stunstunstun/api-test
    2e6b522 (origin/api-test) #3 Add eslint to devDendencies
    5e35c21 #3 Add eslint to devDendenciesf9bbe2a #3 version fixed​
     
    • a603da7 이후의 모든 내역을 삭제하고 돌아가고 싶다면 --hard 옵션과 함께 reset 명령을 이용하면 된다.
    • $ git reset --hard a603da7
    • 특정 commit의 변경 내역을 취소하는 새로운 commit을 발행해야하는 경우도 있다. 이미 commit, push 한 경우 드물게 사용하는 것을 권장...!
    • $ git revert <commit_id>참조 사이트

사이트 보러가기

'Git 정리' 카테고리의 다른 글

Git rebase에 대해 알아보자 🥸  (0) 2021.08.10
Git Cherry Pick에 대해 알아보자🙌  (0) 2021.08.10
Git Flow에 대해 알아보자🤔  (0) 2021.08.10