본문 바로가기

git 공부

Git 정리 - 잘못올린 파일 삭제, 브랜치, add/commit/push 취소

728x90
반응형

미니프로젝트 협업을 위해 간단하게 정리하고있다.
깃허브 잘못 올렸을때, 브랜치 개념, 사용, add/commit/push 잘못했을때 옵션들이다.
다음의 블로그 참고했다.

 

⚡️ Github에 잘못 올라간 파일 삭제하기

 

https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-Github%EC%97%90-%EC%9E%98%EB%AA%BB-%EC%98%AC%EB%9D%BC%EA%B0%84-%ED%8C%8C%EC%9D%BC-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0

 

⚡️ Branch 정리 (git branch / checkout / switch / merge / rebase)

 

https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-%EA%B9%83-Branch-%EC%A0%95%EB%A6%AC-branch-checkout-merge-rebase

 

git add / commit / push 취소하기 💯 정리

 

https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-git-add-commit-push-%EC%B7%A8%EC%86%8C%ED%95%98%EA%B8%B0-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-git-reset-restore-clean

git rm

예) push를 했는데 필요없는 폴더가 있어서 삭제하고 다시 push를 했지만 원격 저장소에 남아있다. -> 원격 저장소엔 삭제가 되지않는다.
=> git 명령어로 파일 삭제 후 push해줘야 한다.

원격 저장소와 로컬 저장소에 있는 파일을 삭제한다.

$ git rm [File Name]

 

원격 저장소에 있는 파일을 삭제한다. 로컬 저장소에 있는 파일은 삭제하지 않는다.

$ git rm --cached [File Name]

gitignore 설정

개인이 관리해야되는 파일들이 원격 저장소에 올라가지 않도록한다.
git add 명령어 전에 설정되어 있어야 적용이 가능하다.
.gitignore파일: Git에서 제외시킬 수 있는 설정 파일

commit , push 해야함

Branch

Git Branch(브랜치)

 

같은 팀끼리 작업 프로젝트를 공유하고 같이 작업할 수 있도록함
시도하기 힘든 테스트를 할 때 바로 이 "브랜치"사용

 

각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할수있다.
각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 여러 작업을 동시에 진행

 

마스터 브랜치(Master Branch)

 

처음에 'Master'라는 이름의 브랜치를 자동으로 생성
커밋하는 작업 모두 마스터 브랜치를 통해 이루어짐

 

통합 브랜치(Integration Branch)

 

배포할 수 있는 버전
안정적인 상태, 즉 모든 기능이 정상적으로 동작하는 상태
버그를 수정하거나 새로운 기능을 추가해야 한다면 토픽브랜치를 만들 것(일반적으로 마스터 브랜치를 통합 브랜치로 사용)

 

토픽 브랜치(Topic Branch)

 

피처 브랜치(Feature Branch)
버그 수정과 같은 단위 작업을 위한 브랜치
통합 브랜치로부터 파생

 

체크 아웃(Checkout)

 

다른 브랜치로 전환

 

헤드(Head)

 

현재 사용 중인 브랜치의 선두 부분

 

머지(Merge)

 

여러 개의 브랜치를 하나로 모음
master 브랜치로 병합

 

리베이스(Rebase)

 

Merge는 변경 내용의 이력이 모두 남아있지만 Rebase는 이력이 단순해지지만, 원래 커밋 이력이 변경 -> 정확한 이력을 남겨둬야 할 필요가 없을 경우 사용

사용

git branch <브랜치이름>

 

브랜치 생성

$ git branch <브랜치이름>
$ git branch mouse

 

브랜치 생성시 master 브랜치 복사본이 만들어짐, 반드시 checkout을 해줘야 해당 브랜치로 전환된다.

$ git checkout 브랜치이름
$ git checkout mouse # mouse브랜치로이동하라

 

브랜치 만들고 바로 이동

# another이라는 브랜치를 만들고 checkout해서 another로 이동해라
$ git checkout -b another

 

git switch <브랜치이름>

 

git checkout과 같다

특정 브랜치나 커밋에서 새로운 브랜치를 만들고 싶으면 브랜치 이름 뒤에 커밋을 지정

# 커밋515c633a 위치에서 새로운 브랜치 'new-branch2'를 만든다.
$ git switch -c new-branch2 515c633a

 

git merge <브랜치이름>

 

현재 브랜치에 <브랜치 이름>을 merge 하는것!

# 지정한 branch의 commit들을 -> 현재 branch 및 워킹 트리에 반영
# <브랜치이름>에 merge하는게 아닌, 현재 브랜치 이곳에 <브랜치이름>을 merge하는 것이다.
$ git merge <브랜치이름>

 

마스터로 돌아온 후 다른 브랜치를 합친다.
헷갈리지 않도록 브랜치 삭제

 

$ git branch -D <제거할 브랜치이름>

 

여러 분기에서 작업한 내용을 확인

 $ git log --graph --all --decorate

브랜치 충돌 해결 (merge vs rebase)

서로다른 브랜치가 같은 파일 같은 라인 수정했을 때 merge하면 충돌이 일어난다.
=>내용을 수정하여 커밋 한다.

git add 취소

파일 상태를 Unstage로 변경
잘못 git add 해서 Staging Area(git add 명령 수행한 후의 상태)에 넣은 파일을 빼고 싶을 때

 

git reset HEAD

 

HEAD가 가리키는 시점의 버전으로 파일을 unstage하고 되돌린다.

# CONTRIBUTING.md 파일을 Unstage로 변경한다.
$ git reset HEAD CONTRIBUTING.md

# 전체 취소
$ git reset HEAD

 

git restore --staged

$ git restore --staged 파일명

 

확인해보면 파일이 초록색 -> 빨간색 되어있다.

git commit 취소

git reset HEAD^

 

단계로 commit 취소
커밋 기록 자체를 말소
꺽쇠 수만큼 이전으로 돌아가게 하는 명령
^ (한단계 앞)
^^ (두단계 앞)
~숫자 로도 가능

commit을 취소하고 해당 파일들은 staged 상태로 워킹 디렉터리에 보존

$ git reset --soft HEAD^

 

commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에 보존

$ git reset HEAD^
$ git reset HEAD~1 # 마지막 commit을 취소. 하나를 되돌림
$ git reset HEAD^^ 
$ git reset HEAD~2 # 마지막 2개의 commit을 취소

 

commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에서 삭제

$ git reset --hard HEAD^

 

git reset 옵션

 

soft : index 보존(add한 상태, staged 상태), 워킹 디렉터리의 파일 보존. 즉 모두 보존.
mixed : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 보존 (기본 옵션)
hard : index 취소(add하기 전 상태, unstaged 상태), 워킹 디렉터리의 파일 삭제. 즉 모두 취소. 작업내용 다 사라지니까 왠만하면 사용X

soft-> staged 살아있음
mixed -> unstaged, 워킹디렉토리o
hard-> unstaged, 워킹디렉토리x

git reset <num> --hard

이전 commit 상태를 지정해 리셋
git reset HEAD로 하면 되돌아갈 위치를 숫자로 세어서 해야되는데, 해시아이디로 지정해서 커밋을 돌아간다

git log를 하면 이전 커밋들 볼 수 있는데 commit 옆에 일련번호임 6자리

 

# git log를 통해 확인한 커밋번호의 앞 6자리를 이용해 이전 상태로 되돌릴 수 있다.
# git reset 커밋번호여섯자리 --hard
$ git reset a6f30a --hard

 

a6f30a 이전의 로그들과 작업들이 지워지고 a6f30a상태로 되돌아옴

 

git revert <num> --hard

 

이전 commit 상태로 되돌리기
reset은 로그를 아예 지워버리기 때문에 미래로 되돌릴 수 없다.
revert는 로그를 덮어쓰는 것이므로 다시 미래로 되돌릴 수가 있다.

커밋번호 111111 후 커밋번호 222222 해줬다. git revert 111111하면 커밋상태 333333이 생성됨

reset해버리면 다른사람의 리포지터리와 커밋 로그가 일치하지 않게 되기 때문에 협업에서 커밋 로그 통일성을 위해 revert사용할 것

 

git commit --amend

 

commit message 변경

$ git commit --amend

 

특정 commit 버젼 상태로 되돌리기

$ git restore --source=해시코드 파일명
$ git restore --source=HEAD~2 파일명 # HEAD와 같은 포인터도 사용가능

git push 취소

자신의 local의 내용을 remote에 강제로 덮어쓰기를 하는 것이기 때문에 주의해야함
되돌아간 commit 이후의 모든 commit 정보가 사라짐

1.워킹 디렉터리에서 commit 되돌리기
최근의 commit을 취소하고 워킹 디렉터리를 되돌리는 법

$ git reset HEAD^

 

원하는 시점으로 워킹 디렉터리를 되돌리는 법

# Reflog(브랜치와 HEAD가 지난 몇 달 동안에 가리켰었던 커밋) 목록 확인
$ git reflog 
# 또는 
$ git log -g

# 원하는 시점으로 워킹 디렉터리를 되돌린다.
$ git reset HEAD@{number} 
# 또는
$ git reset [commit id]
  1. 되돌려진 상태에서 다시 commit
$ git commit -m "new commit messages"
  1. 원격 저장소에 강제로 push 한다.
$ git push origin [branch name] -f
# 또는
$ git push origin +[branch name]


# master branch를 원격 저장소(origin)에 강제로 push
$ git push origin +master

 

-f 옵션
–force 옵션과 동일하다.
+[branch name]해당 branch를 강제로 push한다.

untracked 파일 삭제

git clean

 

추적 중이지 않은 파일만 지운는게 기본동작
.gitignore 에 명시한다. -> 무시되는 파일은 안지움

 

# 옵션 -f: force, -d: diretory 포함

# 디렉터리를 제외한 파일들만 삭제
$ git clean -f

# 디렉터리까지 삭제
$ git clean -f -d 

# 무시된 파일까지 삭제
$ git clean -f -d -x

 

-d 옵션: 디렉터리까지 지우는 것
-x 옵션: 무시된 파일(.DS_Store나 .gitignore에 등록한 확장자 파일들)까지 모두 지우는 것Ex) .o 파일 같은 빌드 파일까지도 지울 수 있다.
-n 옵션: 가상으로 실행해보고 어떤 파일들이 지워질지 알려줌

modified file 삭제

git restore 파일명


수정한 내용을 없애버리고 기존 상태로 되돌린다.

$ git restore 파일명

파일 삭제

git rm

 

로컬, 원격 삭제

# 로컬, 원격저장소 모두 파일이 바로 삭제
$ git rm <fileName>

 

원격만 삭제

# 로컬에는 파일이 남아있지만 commit하면 원격저장소에서 해당 파일이 삭제가 된다.
# 만일 원격저장소에 없는 새로만든 파일이라면 단순히 untracked 처리가 된다.
$ git rm <fileName> --cached
반응형