https://gcapes.github.io/git-course-mace/07-undoing/
https://openclassrooms.com/en/courses/7476131-manage-your-code-project-with-git-and-github/7682726-use-git-reset

stage : add 해서 버전 추적 중인 파일들이 있는 공간

 

git reset

- 3 가지 옵션이 있다. ( --soft, --mixed(기본 옵션) , --hard) 

- (기본옵션) 인덱스는 삭제되지만 작업영역 디렉토리는 영향을 받지않는다.

  • 즉, 커밋한 로그는 사라지지만 파일은 보존
  • Head 도 커밋하기 이전으로 이동 
  • 선택적으로 커밋을 한 것을 골라서 제거 가능

 

git reset --hard

- 커밋한 로그, 파일까지 지우고 커밋하기 이전으로 이동한다.

- push 하지 않은 사항을 모두 제거

 

그러면 이 둘은 언제 사용하는 것이 적합할까?

git reset

  • 커밋취소하고 변경사항 반영
  • 병합 취소

git reset --hard

  • 잘못된 코드 작성
  • 실험적으로 변경 후 되 돌리기

git reset --hard 는 디렉토리까지 지우므로 적용하기전에 백업해두는 것도 고려해봐야 할듯

 

충돌이란?

깃이 자동으로 병합을 완료 할 수 없는 상황을 말한다.

 

(예) 두명의 개발자가 각자의 브런치에서 동인한 코드를 수정했을 때 깃 입장에서는 어떤 변경사항을 최종적으로 반영해야 하는지 알수 가 없다.

 

충돌 발생시키기

1. main 에서 코드를 수정하고  커밋 및 푸쉬 를 한 후

2. 브랜치에서 하나의 기능을 추가 한후 커밋을 한다.

3. 다시 main 으로 돌아와서  병합을 시도

자동 병합: test.py
충돌 (내용): test.py에 병합 충돌
자동 병합이 실패했습니다. 충돌을 바로잡고 결과물을 커밋하십시오.

 

위와 같은 메시지가 출력 될 것이다.

 

충돌 해결하기

충돌이 일어난 코드를 확인

<<<<<<< HEAD (현재 변경사항)
print('hello' * 3)

# check odd number
num = int(input("Enter a number: "))
if (num % 2) == 0:
    print(f"{num} is Even")
else:
    print(f"{num} is Odd")
=======
print('hello ' *3)

# check odd number
num = int(input("Enter a number: "))
if (num % 2) == 0:
    print("{0} is Even".format(num))
else:
    print("{0} is Odd".format(num))
>>>>>>> dev2 (수신 변경사항)
  • <<<   >>> 이 충돌이 일어난 구간을 알려주는 기호
  •  ==== 는 구분해주는 기호 

여기서 무엇을 제거하고 저장할 것인지 결정하고 남겨둔 후 

메인에서 최종본만 남겨두고 충돌을 알려주는 구문을 제거하면 된다.

git add .
git commit -m "resolve conflicts"
git push -u origin main

 

확인

git log --pretty=oneline --graph

 

아래와 같이 커밋 내역을 확인 가능

*   d3...be6 (HEAD -> main, origin/main) resolve conflicts
|\  
| * 484...778 (dev2) add pow
* | e5b..17 fit: check odd number
|/  
* ef1...9bbc squash & merge
* 4df..a20126 first commit

브랜치(branch)

프로젝트 기준 코드인 main 으로 부터 독립적인 작업공간을 만들어주는 기능

 

명령어들

#브랜치 생성
git brance -b branch_name

# 브랜치 삭제
git branch -d branch_name #지역 저장소의 브랜치 삭제, 병합여부 확인
git branch -D branch_name # 지역 저장소의 브랜치 삭제, 확인 없이 삭제


git push origin -d branch_name #원격저장소의 브랜치 삭제 

# 브랜치 이동
git checkout branch_name

 

현재 실습 프로젝트의 브랜치 상태 확인

git log --pretty=oneline --graph

 

브랜치 병합하기

Squash merge : 모든 커밋이력이 아래 그림과 같이 하나로 된다.

from microsoft

git checkout main
git merge --squash branch-name
git commit -m "squah and merge"
git push -u origin main

git add 를 하기전에 

git status 명령어를 이용하여서 현재 작업 중인 디렉토리에서 커밋할 준비가 안된 파일 혹은 디렉토리(폴더)를 확인 할 수 있다.

* 스테이징 영역( staging area)에 아직 추가되지 않은 것들을 보여준다.

 

git add 사용방법

 

  git add .   : 현재 작업 중인 디렉토리에서 변경된 모든 내용을 추가 (스테이징 영역에 추가)

  git add 파일이름 파일이름 폴더명 : 명시된 파일이름 혹은 디렉토리 명만 추가

  git add -A  : (현재 작업 중인 디렉토리의 위치와 상관 없이) 모든 디렉토리에서 변경된 내용을 추가 

  git add -p : ??

 

※ 잘못 추가된 사항이 있을 때 제거 :  git rm --cached  file name or directory name

 feat  :  새로운 기능 추가

 fix   : 버그수정

docs   : 문서수정

 style  : 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우

 refactor   : 코드 리팩토링

 test  : 테스트 코드, 리펙토링 테스트 코드 추가

 chore  :  빌드 업무 수정, 패키지 매니저 수정

 

ex) feat: 로그인 기능 추가

 

참고사이트

https://www.conventionalcommits.org/en/v1.0.0/

 

Conventional Commits

A specification for adding human and machine readable meaning to commit messages

www.conventionalcommits.org

https://velog.io/@outstandingboy/Git-%EC%BB%A4%EB%B0%8B-%EB%A9%94%EC%8B%9C%EC%A7%80-%EA%B7%9C%EC%95%BD-%EC%A0%95%EB%A6%AC-the-AngularJS-commit-conventions

 

'프로그래밍 > Git & GitHub' 카테고리의 다른 글

협업을 위한 깃 명령어: 브랜치  (0) 2023.11.30
git add  (0) 2023.07.30
Github로 버전 관리 할때 추천하는 방식  (0) 2023.07.21
.gitignore 작성  (0) 2023.07.18
git push 에러발생  (0) 2023.07.14

+ Recent posts