git push 충돌 회피 가장 처음 실행 했을 때 지속적인 업데이트 상태 확인 변경 사항 있을 때 강제로 원래대로 돌리기 branch를 변경할 때 임시로 파일을 저장하는 수단. working directory의 실제 파일을 삭제하는 것이다. Staging Area (git index)에서만 제거하고 Working directory에 있는 파일은 지우지 않고 남겨둘 수 있다. 이것은 rm.txt 파일 생성해서 하기 commit message를 잃어 버릴 수도 있기 때문에 HEAD 설정을 다시 해주는 것이 좋다. 기본 설정 포멧 지금 커밋과 뒤로 두 단계 커밋의 main.c에 대한 비교 커멘드는 아래 3개 모두 동일한 기능을 한다. remote하고의 비교 특정 파일만 보고 싶은 경우 간단히 파일 변화만 보기 단 위 방법은 submodule이 있을 경우 문제가 발생한다. 특정 파일 변동 사항 검색 해당 로그 확인 위와 같이 git checkout -- <파일> : 워킹트리의 수정된 파일을 index에 있는 것으로 원복 git reset -- <파일명> : 해당 파일을 index에 추가한 것을 취소(unstage). 워킹트리의 변경내용은 보존됨. (--mixed 가 default) 특정 commit message에서 복원 hard, soft, mixed 차이점 revert 방식 git reset --hard HEAD : 워킹트리 전체를 마지막 커밋 상태로 되돌림. 마지막 커밋이후의 워킹트리와 index의 수정사항 모두 사라짐. --soft : index 보존, 워킹트리 보존. 즉 모두 보존. git clean -f git count-objects -vH 100MB이상의 파일을 push 할 경우 아래와 같은 error 메시지를 나타낸다. large file system (lfs)를 설치하고 이를 이용해서 commit & push를 한다. 트랙킹 파일 리스트 확인: git lfs ls-files 그냥 untacked시키는 방법은 git rm --cached를 사용하면 되나 저장소 history안에 해당 파일 변경 내역이 그대로 남기 때문에 문제는 계속된다. 해결방법으로는 Squash all commits (Pull Request 이후에 처리) 아래는 여러 방법들 중 하나의 것이다. 기존 local branch 삭제 참고자료GIT tip 정리
충돌 회피
# git pull시 현재 commit하지 않은 것 때문에 충돌이 발생하면 아래와 같이 stash를 이용해서 임시저장 할 수 있다.
git stash
git stash list
git pull
git stash pop
submodule
git submodule update --init --recursive
git submodule update --recursive
git submodule status
git submodule update -f --init --recursive
Git stash
# 임시 저장
git stash
# 임시저장 리스트 확인
git stash list
# 임시저장 적용하고 바로 stage 상태로 만듬
git stash apply --index
# 임시저장 제거, hash를 지정하지 않으면 가장 최근 것을 제거함.
git stash drop
# 적용하면서 바로 제거함
git stash pop
파일 삭제
git rm
그리고 commit을 해야 한다.git rm --cached
다시 말해서 하드 디스크에 있는 파일은 그대로 두고 Git만 추적하지 않게 한다..gitignore
파일에 추가하는것을 빼먹었거나 대용량 로그 파일이나 컴파일된 파일 .a
파일 같은 것을 실수로 추가 했을 때 쓴다.$ git rm --cached readme.txt
#여러게 삭제
$ git rm log/\*.log
*
명령으로는 이름 매칭이 안될 수도 있다.git status > rm.txt
형식으로 list를 만들고 파일명을 다듬은 다음cat rm.txt | xargs git rm --cached
으로 해당 txt에 있는것을 staging area에서 제거 한다.git log
git log --all
특정 파일 변화 로그 찾기
파일 이름 바뀐것 까지 참조하면서 모두 보이기HEAD detached at
checkout
을 sha1 hash
코드로 하게 되면 자동으로 HEAD
가 설정 되지 않는다.branch
이름으로 할 경우 이런 문제가 발생하지 않지만 그냥 할 경우 발생하게 된다.git commit -m "....."
git branch my-temporary-work
git checkout master
git merge my-temporary-work
git diff
git diff [--options] <commit> <commit> [--] [<path>...]
$ git diff HEAD^^ HEAD main.c
$ git diff HEAD^^..HEAD -- main.c
$ git diff HEAD~2 HEAD -- main.c
git fetch origin #pull과 다르게 local repo.와 merge하지 않음. 이력만 받아옴.
git diff master origin/master
git ls-files | grep .java | xargs git diff
--state
$ git diff --stat 2ed6ec *.R
2018_03_09_NB_SVM_RF_MLP.R | 314 +++++++++++++++++++++++++++++++
Class Imbalance.R | 90 +++++++++
FeatureSelectionWithRFE.R | 59 ++++++
FileWriter.R | 93 ++++++++++
evaluationModel.R | 38 ++++
graph.R | 188 +++++++++++++++++++
jsonESLABCollector.R | 116 ++++++------
jsonToDataFrame.R | 385 +++++++++++++++++++++++++++++++++++++++
jsonToSingleDataFrame.R | 208 +++++++++++++++++++++
phone_status_anlysis.R | 41 ++++-
post_matchig_with_arrival_time.R | 277 ++++++++++++++++++++++++++++
refinedAutoLabels.R | 158 ++++++++++++++++
12 files changed, 1905 insertions(+), 62 deletions(-)
git 무식하게 완전 초기화
rm -rf .git
git init
git add .
git commit - m "initial commit"
git remote add origin <github-uri>
git push -u --force origin --all
그 때는 rebase
를 이용해서 정공법으로 해결해야 한다.Branch 관련
Branch 삭제
#local delete
git branch -d <branch_name>
#remote delete
git push <remote_name> :<branch_name>
Branch 이름 변경
# Local에 있는 branch 이름 변경하기
git branch -m oldbranch newbranch
# Remote에 존재하는 oldbranch 삭제하기
git push origin :oldbranch
# newbranch push 하기
git push origin newbranch
파일 복원
파일 변경 사항 알아내기
git log -- UNLOCKED_Analysis.R
$ git show --stat f27a8d
commit f27a8d01f6fa828d4e38919823fb1ddb462136b6
Author: Jemin Lee <leejaymin@cnu.ac.kr>
Date: Tue Nov 8 23:50:22 2016 +0900
change file name
README.md | 17 +++++++++++++++++
jsonToDataFrame.R | 9 +++++++++
phone_status_anlysis.R | 1 +
UNLOCKED_Analysis.R => refinedAutoLabels.R | 4 +++-
4 files changed, 30 insertions(+), 1 deletion(-)
UNLOCKED_Analysis.R
파일이 refinedAutoLabels.R
로 변경된 것을 알 수 있다.
갑자기 파일이 사라져서 log를 통해서 확인해본 예제이다.개별파일 원복
git checkout HEAD -- <파일명> : 워킹트리의 수정된 파일을 HEAD에 있는 것으로 원복(이 경우 --는 생략가능)
git checkout FETCH_HEAD -- <파일명> : 워킹트리의 수정된 파일의 내용을 FETCH_HEAD에 있는 것으로 원복? merge?(이 경우 --는 생략가능)index 추가 취소
git reset HEAD <파일명> : 위와 동일$ git checkout ec76bc~1 allData.RData
commit 취소
--hard
HEAD~2reset
계열은 결국 커밋을 조작 하기 때문에 혼자 사용하는 branch
에서 사용하는것이 적당하다.
여럿이 사용하는 branch라면 revert
를 이용해서 이력을 rollback한 내용들도 commit으로 남기는 것이 좋다.워킹트리 전체 원복
(변경을 커밋하지 않았다면 유용)
git checkout HEAD . : ??? 워킹트리의 모든 수정된 파일의 내용을 HEAD로 원복.
git checkout -f : 변경된 파일들을 HEAD로 모두 원복(아직 커밋하지 않은 워킹트리와 index 의 수정사항 모두 사라짐. 신규추가 파일 제외)* 참조 : reset 옵션
--mixed : index 취소, 워킹트리만 보존 (기본 옵션)
--hard : index 취소, 워킹트리 취소. 즉 모두 취소.* untracked 파일 제거
git clean -f -d : 디렉토리까지 제거Git tracked file 용량 파악 하기
100MB 이상 파일 push 하기
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: a021e64e835a3163bc978f98da55335e
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File huge_files.zip is 151.37 MB; this exceeds GitHubs file size limit of 100.00 MB
brew install git-lfs
git lfs install # you only need to run this once per user account
git lfs track "*.psd" # Git LFS selects the file types you would like.
git add .gitattributes # make sure .gitattributes is tracked.
git add file.psd
git commit -m "Add design file"
git push origin master
민감 파일 이력에서 자동 찾아 제거 (sensitive data remove in entire history)
.gitignore
설정을 하지 않아 password와 같은 정보가 들어 있는 config 파일이 commit push 되었을 때 변경이력에서 이러한 부분을 제거하는 방법을 다룬다.git filter-branch
와 BFG Repo-Cleaner
를 이용한 방법 있다.BFG Repo-Cleaner
를 이용한 방법을 다룬다.java -jar bfg-1.13.0.jar --delete-files <지울 파일 이름>
java -jar bfg-1.13.0.jar --replace-text <지울 파일 이름>
# 원격 저장소에 강제로 반영
git push origin --force --all
Git commit 메시지들 정리하기
git checkout <branch-name>
git rebase -i master # interactive mode
# vim 화면에서 pick이 선택이고 s가 squash 한다는 의미가 된다.
# 그 다음 새로운 commit log를 작성하게 된다.
git push origin branch-name --force
PR이 다수 반영된 upstream 내용을 origin과 local에 반영하기
git checkout master
git fetch upstream
git rebase upstream/master
git push -f origin master
git branch -d <branch name>
공식 홈피: https://help.github.com/en/articles/removing-sensitive-data-from-a-repository
BFG: https://rtyley.github.io/bfg-repo-cleaner/참고자료
'Computer Science > Git' 카테고리의 다른 글
git difftool 사용법 (0) | 2017.02.28 |
---|---|
GIT tip 정리 (1) | 2017.02.01 |
자동으로 commit 위치 찾아서 Git으로 지운 파일 복원하기 (0) | 2017.01.31 |
Git config 설정 (계정설정) (1) | 2016.10.02 |
Github에 100Mb이상 파일 올리는 방법 (오류 해결) (5) | 2016.08.09 |
Github Page로 개인 홈페이지 제작, Private Git 얻기 (2) | 2016.07.03 |