1. Git 로그 검색하기
git log --name-only ( 추천 ) // git log 보다는 변뎡된 파일 명도 같이 나오는 이걸 사용
git log --grep=검색어 ( 추천 ) // 검색어가 있는 내용만 검색
git log -p -2 ( 추천 ) // 가장 최근 두개의 결과만 보여줌, 코드 변경사항도 같이 보여줌
git log --oneline // 커밋의 제목만 볼 경우
-> git log --oneline | grep PWM // pwm 관련 내용만 볼 경우
-> git log --oneline | grep -i --color=auto PWM // 좀더 보기 편하게( -i 대소문자 구분없이 검색)
git log -p ./os/common_linux/dil/dil_pwm.c 특정 파일의 변경 이력만 볼 수 있다. (경로까지 알려줘야함)
git log // 일반적인 변경사항, 변경자
git log -p -1 --word-diff // 변경점을 줄단위가 아닌, 단어 단위로 보여줌
-> git log -p 커밋번호 -1 // 그 커멋 번호에 해당 되는 코드 변경 내용+커밋메시지 보기
---> git log --oneline 명령으로 찾은 후 커밋 번호만 복사해서 사용하면 편리하다.
git log --pretty=short (간편히 볼때 추천) // oneline : 한줄씩, short, full, fuller 옵션도 있음
git log --pretty=format:"%h %s" --graph ( 간편히 볼때 추천 ) // 부모 tree내용도 봄(--graph)
//... git log상태에서 /검색어 치고.... 단어 검색 대문자 N 은 윗 방향으로 검색, 소문자 n은 아래 방향으로 검색
< Git show >
git show commit_id // 그 커밋의 상세 변경점을 볼 수 있음.
git show HEAD // 가장 마지막 변경점 보기
git show HEAD^ // 전전 변경점 보기
git show HEAD~2 // HEAD로부터 2단계 위의 변경점 보기
2. 변경사항 Diff
git diff HEAD^ HEAD ( 추천 ) // 현재의 내용과 바로전 내용(HEAD^) 비교함
git diff HEAD^^ HEAD // 현재의 내용과 전전 내용(HEAD^^) 비교함
git diff HEAD^ HEAD > diff_0518.patch // 변경사항을 patch파일로 저장함.
git diff 커밋번호_B 커밋번호_A // 번호별 차이도 볼 수 있음
--> git log --oneline 으로 간략히 보고... 커밋번호 복사해서 위 명령어 사용
< 브렌치별 차이도 볼 수 있다>
git diff A_브랜치 B_브랜치
git diff --stat // 간단히 어떤 파일들이 변경되었는지 세부 내용 보지 않고 통계치로만 보기
3. Git untracked file 보지 않기... git untracked files not showing
git status // 하면 변경파일과, untracked files 까지 보여짐
git status -uno // modified files만 볼 수 있다.
git status --untracked-files=no // 다음도 modified files 만 보여준다.
git config status.showUntrackedFiles no // 또는 항상 안보고 싶다면, ... 설정을 변경한다.
git config status.showUntrackedFiles
// 입력후 enter 키 누르지 말고, tab키를 누르면, untracked파일 리스트가 보인다.
4. commit-templates.txt
이 파일은 commit할 때 문서 양식이다. 필요에 따라 내용을 변경할 수 있다.
vi .git/commit-templates.txt
5. gitignore 파일로 변경점 관리 안 할(무시할) 파일 등록
//작업중인 최상위 폴더에서... 생성한다. 그래야 효력이 그 아래 폴더까지 해당됨
vi .gitignore // 최상이 폴더에 파일 만들어 둔다.
.....................<.gitignore 본문>...............
# // 이 폴더 내용 전체 무시 , '#' 문자는 주석을 넣을 때 앞에 사용
build/
# // xxx.patch 파일 들 모두 무시
*.patch
.....................................................
6. git 작업브렌치 만들고, 이후 본브랜치에 merge하기
git branch // 현재 브렌치 확인 (만약 본 브렌치이면, 신규 bug_fix용 브랜치하나 생성)
git branch bug_fix_0519 // 신규 브랜치 생성
git checkout bug_fix_0519 // 신규 브랜치로 이동
// 위의 두가지를 한번에 하려면
// git checkout -b bug_fix_0519
// 여기서 코드 수정 작업하고, 변경 코드 저장한 후
git add 작업파일1 작업파일2 // 작업파일 add
git commit // 작업한 파일들 bug_fix_0519 브랜치에 올린다.
// git commit -m "작업내용설명"
// 이렇게 직접 수정 내용을 바로 적어도 되지만, 자세히 적기 위해
// git commit으로 하고 vi에디터를 통해 내용을 상세히 적는다.
git log // 신규 내용 commit 잘 되었는지 확인
// 이후 이 개선사항을 본 브랜치에 넣고 싶으면
git checkout 본_브랜치명 // 본 브렌치로 이동(master가 될 수 도 있고, 프로잭트명일 수도 있고)
git merge bug_fix_0519 // 아까 작업한 bug_fix_0519 브랜치 내용을 합친
// 만약 코드에 들어간 whitespace로 인해서 merge 잘 안된다면, whitespace 무시옵션사용
git merge -Xignore-space-change bug_fix_0519
// conflict 발생하면, 직접 git status 로 어떤 파일 문제인지 확인후, 수작업으로 고친다.
// 이후 다시 commit한다.
git merge --abort // 이래저래 머지하다 문제 되면, 방금 merge한 것을 취소할 수 있다.
git log // bug_fix_0519 에서 작업한 것이 log에 들어왔는지 재 확인
git push review // 본브렌치의 원격 저장소에 코드 push 작업
// gerrit 사이트에서 push내용 잘 들어갔는지 확인 및, 동료에게 리뷰 요청
git push review 목적지
그리고 전에 작업하던 브렌치는 지워버린다...
git branch -d bug_fix_0519 // 브랜치 지우기
8. git reset
git reset HEAD~1 // 마지막 커밋 바로전으로 이동하기
9. git tag // 별명 붙이기
git tag v2.5 commit_id // v2.5 라고 별명 붙이기
< git tag + git log >
git log v2.5..v2.6 // version 2.5와 2.6 사이의 commit들 보기
10. 패치 생성 및 적용하기
// 새로운 분기 생성
git branch mybugfix
// 새 브랜치로 이동
git checkout mybugfix
// 수정 작업 진행 후, git add , git commit을 진행하고
// 수정한 패치를 생성한다.
git format-patch 메인브랜치명 // 메인 브랜치 명...
// 그러면 mybugfix 브랜치에서 수정하여, commit한 내용들이 나온다.
// LED버그 수정, sound버그 수정, video버그 수정등
// 3번의 commit작업이 있었다면, 번호-커밋제목.patch형식으로 파일이 자동생성됨.
0001-LEDbugFix.patch
0002-SoundbugFix.patch
0003-VideobugFix.patch
// 이 작업은 중요한데,... 작업 브랜치에서 작업한 내용이 있고, 이후 메인 브렌치로 이동하면
그 내용이 잠시 안보이게 되는데(사실은 있지만)...
혹시라도 작업 브랜치를 실수로 지운다면.... 그 기록이 사라지므로. 이렇게 patch 파일로
보관하는 것이 이중 안전 장치가 될 것 같다.
// 이제 메인 브렌치로 이동한다.
// 메인브렌치는 다같이 참여해서 개발하는 프로잭트 브랜치를 말한다.
git checkout 메인브렌치
// 이제 내 mybugfix브랜치에서 수정했던 내용이 있는 패치를 메인브렌치에 적용한다.
git apply 0001-LEDbugFix.patch
// 이제 patch로 수정을 적용하면, 이제 메인브렌치에서 add, commit을 하여,
// 다른 동료들도 적용된 내용을 볼 수 있게 한다.