git push origin +<브랜치명>

이 명령어를 사용하면 제대로 수정된다.

+를 붙이면 덮어씌우겠다는 뜻이 된다.

 

 

git push를 했을 때 나오는 reject문

local Repository가 서버에 있는 Repository보다 오래되었을 때 나온다. Push 를 하게 되면 서버에 있는 최신 내용은 날라가기 때문에 나오는 오류.

'개발 > git' 카테고리의 다른 글

git untracked file로 되돌리기  (0) 2022.04.02
vimdiff를 사용하기  (0) 2021.01.17
git 병합 충돌  (0) 2021.01.17
GIT Cherry-pick & rebase  (0) 2020.07.29
GIT 협업  (0) 2020.07.24

해당 내용은 생활코딩에서 공부한 내용을 복습하기 위해 다시 간단하게 정리한 글입니다.

더 자세한 건 생활코딩에서


Branch

client들이 서로 다른 기능을 원할 때, 이런 경우 branch를 이용해서 각 branch마다 기능을 따로 구현하면 된다.

git branch는 생성된 모든 branch를 보여주고, git branch <브랜치명>으로 브랜치를 생성할 수 있다.

 

git checkout <branch>로 branch를 넘나들 수 있다.

branch를 변경하면 파일이 해당 branch에 맞게 변경된다.

이렇게 branch들이 work 3에서 시작하여 각각 work 4로 나아간 걸 볼 수 있다.


Branch 병합

merge는 두 branch를 합치고 싶을 때 사용한다.

합칠 두 branch의 공통의 조상을 base라고 부른다. 위의 사진의 경우 work 3가 공통의 조상이 된다.

이렇게 두 branch를 합치는 것을 merge commit이라고 부른다.

 

merge를 할 경우 먼저 master branch로 이동해야한다.

이동한 후 git merge <branch>하면 해당 branch와 master가 병합된다.

병합 전으로 돌아가고 싶으면 reset을 이용하면 된다. git reset --hard 74b3907을 하면 전 상태로 돌아간다.

 

이제 서로 같은 파일을 병합할 때는 서로 다른 부분을 수정했다면 알아서 바꿔서 저장해준다.

 

서로 같은 부분을 수정했으면 merge할 때 conflict가 일어난다.

conflict가 일어난 파일의 conflict가 일어난 부분을 수정해주고 commit을 하면 merge가 된다.


3 way merge

master base branch1 2 way merge 3 way merge
A A A A A
M B B ? M
C C 1 ? 1
M D 1 ? ?

2 way merge는 master와 branch1의 내용이 서로 다르면 conflict가 일어난다.

3 way merge는 base를 기준으로 한 branch의 내용만 변경되었으면 그 내용으로 변경되고, 두 branch 다 내용이 변경되었으면 conflict가 일어난다.

'개발 > git' 카테고리의 다른 글

GIT Cherry-pick & rebase  (0) 2020.07.29
GIT 협업  (0) 2020.07.24
GIT Backup  (0) 2020.07.22
git 버전관리  (0) 2020.07.06
git 명령어  (0) 2020.07.05

해당 내용은 생활코딩에서 공부한 내용을 복습하기 위해 다시 간단하게 정리한 글입니다.

더 자세한 건 생활코딩에서


버전 관리 시작

먼저 git bash를 키고 버전을 생성할 디렉토리로 이동한다.

git bash에 git init . 입력

입력하고 난 후 .git이라는 디렉토리가 생성된다.

.git이 추가됬다.

.git에 버전이 저장되므로 .git은 지우면 안된다.

 

버전 생성전에 아래 명령어를 입력해준다.

 

git config --global user.name "Your Name"

git config --global user.email "you@example.com"

 

Your Name과 you@example.com은 각자에 맞게 변경해준다.


버전 생성

수정한 파일 전체는 Working tree에 존재하고, 그 중 버전을 생성할 일부(전체)를 Staging Area에 올린다.

git에게 버전을 생성하라고 하면 git은 Staging Area에 있는 파일들로 하나의 버전을 생성하여 repository(.git)에 넣는다.

 

즉, Working tree는 파일을 수정하는 곳

Staging Area는 그 중 버전을 만들 파일들이 있는 곳

Repository는 만들어진 버전들이 있는 곳이라고 생각하면 된다.

 

버전을 생성하기 위해 파일을 생성한다.

파일이 추가된 후 현재 상태

git add hello1.txt로 파일을 Staging Area로 올린다.

hello1.txt가 Untracked files에서 Chages to be committed으로 변경되었다.

 

git commit -m "Message 1"으로 Repository에 버전을 생성해준다.

그 후 Working tree에는 아무것도 존재하지 않는다.


버전 이동

현재 상태

버전을 이동할 때는 (삭제 x) git checkout <commit>을 사용한다.

<commit>에는 git log를 치면 나오는 각 commit(노란색) 뒤의 id를 입력하면 된다.

버전이 변경된 모습

가장 마지막 버전으로 이동하고 싶으면 git checkout master를 입력하면 된다.


버전 삭제

버전을 이동할 때 그 후의 버전은 삭제하고 싶다면

git reset을 사용하면 된다.

git reset에는 여러 모드가 있고, 지금 사용할 모드는 --hard이다.

 

아예 master가 Message 2 버전으로 변경되었고 그 이후의 버전은 삭제되었다.

 

 

버전으로 연결된 링크가 없으면 그 버전(commit)은 삭제되고, 링크가 있으면 삭제되지 않는다.

branch가 가리키는 커밋을 변경할 때는 reset을

head가 가리키는 branch나 commit을 변경할 때는 checkout을 사용한다.


git revert

버전을 삭제하지 않고 이전 버전으로 바꾸고 싶을 때 사용한다.

만약 git revert version4를 하면 version 4에서 추가된 내용들이 삭제된 버전이 생성된다.

따라서 그 이전 버전인 version 3와 동일한 내용을 가진 새로운 버전이 생성된다.

 

git revert 실행
           git revert 전                                                                      git revert 후

기존의 R4는 삭제되지 않고 Revert R4가 추가되었다.

Revert R4는 R3와 내용이 같다.

 

revert는 해당 버전에서 추가된 내용을 삭제한 새로운 버전을 추가하는 것이기 때문에

중간의 Message 2로 revert를 하면 충돌이 난다.

그 후 R3와 R4에서 추가된 내용을 어떻게 할지 git이 처리하지 못하고 conflict (충돌)가 일어난다.

따라서 역순으로 revert를 해야한다.

'개발 > git' 카테고리의 다른 글

GIT Cherry-pick & rebase  (0) 2020.07.29
GIT 협업  (0) 2020.07.24
GIT Backup  (0) 2020.07.22
git Branch & Conflict  (0) 2020.07.10
git 명령어  (0) 2020.07.05

해당 내용은 생활코딩에서 공부한 내용을 복습하기 위해 다시 간단하게 정리한 글입니다.

더 자세한 건 생활코딩에서


 

현재까지 사용해본 git bash 명령어

까먹지 나중에 계속 찾을 수 있도록 정리해둔다.

명령어 기타
git init 버전 관리를 시작  
git status 현재 상태 출력  
git add <파일 이름> 해당 파일 Statging Area로 올림  
git add <디렉토리 이름> 해당 디렉토리의 밑에 있는 모든 파일 올림  
git commit 버전 생성
여러 줄의 커밋 메시지 작성 가능
 
git commit -m "메시지" 커밋과 메시지 작성을 동시에 수행  
git commit -am "메시지" add와 commit을 한번에 실행
(untracked 상태의 파일은 불가)
 
git log 버전들을 보여줌  
git log --stat 버전별로 추가한 파일 출력  
git log -p 마지막 버전에서의 변경 사항 출력  
git log --all --graph --oneline 모든 branch들의 상태를 그래프로 출력  
git diff 마지막 버전과 현재 상태와의 차이점 출력  
git reset --hard 마지막 버전으로 돌아가기
(수정하던 것까지 삭제)
다른 사람과 공유되기 전 단계의 버전만 리셋
git reset --hard <commit> 해당 버전일때로 돌아가기  
git checkout <commit> 해당 버전으로 변경  
git checkout <branch> 해당 브랜치로 이동  
git revert <commit> 해당 버전에서 추가된 내용을 삭제한 버전 생성
(이전 버전과 동일한 버전이 생성됨)
버전 4에서 버전 1로 돌아가고 싶으면 revert를 4, 3, 2 버전 순으로 해야 충돌 x
해당 버전에서 추가된 내용만 삭제하기 때문
그 이후 버전에서 추가된 내용은 git이 처리하지 못하고 충돌이 일어남
git branch 모든 브랜치 출력  
git branch <브랜치명> 브랜치 생성  
git merge <branch> master와 branch 병합  
git remote 연결되어있는 원격저장소 출력  
git remote <저장소이름> <저장소주소> 원격저장소 추가  
git fetch remote branch 가져오기  
git push 원격저장소에 올리기  
git pull 원격저장소 가져오기  
git cherry-pick <commit> 해당 커밋의 변화 내용을 현재 branch에 추가  
git rebase <branch> 현재 branch를 해당 branch의 뒤로 이동  

 

'개발 > git' 카테고리의 다른 글

GIT Cherry-pick & rebase  (0) 2020.07.29
GIT 협업  (0) 2020.07.24
GIT Backup  (0) 2020.07.22
git Branch & Conflict  (0) 2020.07.10
git 버전관리  (0) 2020.07.06

+ Recent posts