Git test
Q1.
- git log: 다음 그림 git_test_Q01.png 와 완전히 동일한 log를 출력하시오.
A1.
주도권을 가지고 다른 브랜치를 merge할 것이다!
- 주도권을 가진 브랜치로 checkout
$ git checkout master
- merge할 브랜치를 merge
$ git merge server
- 만약
(master) $ git merge server
에서 conflict 발생 시!
- merge abort 하려면
$ git merge --abort
- conflict 발생한 file 수정
- modify & save
- conflict 발생한 file 다시
$ git add <conflicted file>
-
계속 merge 수행
- 다시 commit
$ git commit -m"COMMIT MESSAGE"
- merge 완료
- 다시 commit
bonus
- 완전히 merged 브랜치 지우고 싶다:
$ git branch -d [BRANCH]
- merge되지 않았더라도 그 브랜치를 지울 것이다.:
$ git branch -D [BRANCH]
- 브랜치 지우기
$ git branch -d server
$ git branch -d client
Q2.
- git log: 2012년 8월 18일에 작성된(Author date) commit의 목록을 출력하시오.
A2.
git log [OPTION]
--since= 해당 일 이상
--until= 해당 일 미만
(공식 문서에는 '이하'로 되어있지만 실제로 써보면 '미만'임)
git log [OPTION]
--since= 해당 일 이상
--until= 해당 일 미만
(공식 문서에는 '이하'로 되어있지만 실제로 써보면 '미만'임)
$ git log --since=2012-08-18 --until=2012-08-19
Q3.
- git log: 가장 최근 10개의 commit log를 다음 형식으로 출력하시오.
2458a4 Sat Aug 18 11:47:08 2012 -0400 Reenable copy/rename detection in the status view
A3.
2458a4 Sat Aug 18 11:47:08 2012 -0400 Reenable copy/rename detection in the status view
$ git log --all --pretty="%h %cd %s" -10
Q4.
- git log: tig의 수정 내역을 검토하던 중 중간에 Copyright 문구가 여러 번 바뀐 것이 발견되었다.
4-1) io.h 파일의 Copyright가 가장 최근에 변경된 것은 어떤 commit인가?
4-2) io.h 파일의 Copyright가 2006-2010에서 2006-2012으로 변경된 commit은 어떤 것인가?
A4-1.
4-1) io.h 파일의 Copyright가 가장 최근에 변경된 것은 어떤 commit인가?
4-2) io.h 파일의 Copyright가 2006-2010에서 2006-2012으로 변경된 commit은 어떤 것인가?
$ git log --all -p -S "Copyright" --follow io.h
그런데 그냥..
$ git log --all -p --follow io.h
해서 안에서 /Copyright
하는 것도 괜찮음
더 다양한 정보가 나옴. -S
옵션으로는 못보던거임
- A4-1:
$ git log --all -p --follow io.h
->/Copyright
로 구한0609a8
커밋
A4-2.
$ git log --all -p --follow io.h
-> /Copyright
로 수동으로 찾았음
-S Copyright
, --grep "Copyright"
로는 안잡힘
Q5.
git commit: graph.c 의 indentation이 마음에 들지 않아 코드 정리를 하려고 한다.
git_devel 에는 이미 코드가 수정되어 있다.
다음 수정을 하나의 commit으로, 나머지 부분을 다른 하나의 commit으로하여 git_devel에 반영하시오.
A5.
??
Q6.
- tig_release git를 만드는 도중 이전 commit log message에서 오타가 발견되었다. 다음 오타를 수정하시오.
e4f5f66 Reconsile tig-1.2
d5812d1 Reconsier tig-1.1 <== 오타 수정
f91cb9a Reconsile tig-1.0
bc31be9 Reconsile tig-0.18
A6
- d5812d1 (Reconsider tig-1.1) 커밋으로 Checkout!
1.1 $ git checkout d5812d1
1.2 $ git checkout HEAD^
- commit --amend 로 이미 된 커밋 수정
$ git commit --amend
e4f5f66 Reconsile tig-1.2
d5812d1 Reconsier tig-1.1 <== 오타 수정
f91cb9a Reconsile tig-1.0
bc31be9 Reconsile tig-0.18
1.1
$ git checkout d5812d1
1.2
$ git checkout HEAD^
$ git commit --amend
저장후 나감
새로운 커밋이 만들어짐
3-1. 방법 1. rebase
(fc3383a) $ git checkout master
(master) $ git rebase fc3383a
그런데 이렇게하면, 같은 remote의 repository를 쓰는 사람들한테 피해를 입힘
3-2. 방법 2. merge
$ git checkout master
$ git merge master
엄청 conflict난다.
수정하고 나서
$ git merge --continue
$ git branch master HEAD
$ git commit --amend
"Reconsile tig-1.2"
Q7.
- modify git history: 만들어진 tig_release git의 history를 검토하던 중, .gitignore 파일이 처음 추가된 것은 0.4와 0.5 사이였으나, tig_release git에는 Reconsile tig-0.10에 처음으로 포함된 오류가 발견되었다.
tig_release git의 Reconsile tig-0.5 부터 0.9의 각 commit에 정확히 맞는 버젼의 .gitignore 파일을 추가하여 문제를 해결하시오
tig_release git의 Reconsile tig-0.5 부터 0.9의 각 commit에 정확히 맞는 버젼의 .gitignore 파일을 추가하여 문제를 해결하시오
A7-1. tig_release에서 작업
- $ git checkout to tig-0.5
.gitignore 없음
- .gitignore 추가
(tig-0.5) $ git add .gitignore # .gitignore 추가
(tig-0.5) $ git commit --amend # 커밋 수정
- 커밋이 새로 만들어짐
- original커밋의 부모(HEAD^) 커밋이 새로운 base가 됨
- rebase
(cd3bef5) $ git checkout master
(master) $ git rebase cd3bef5
충돌발생
- conflict를 수정 후 git add -> git rebase --continue
$ git add .gitignore
$ git rebase --conitniue
- 노가다 수행
Q8.
- migration: tig_release git의 관리 정책이 변경되었다.
tig 1.2 이전에는 minor version change마다 tig_devel에서 tig_release로 변경된 내용을 이전하였으나, tig 1.2부터는 각각의 commit을 tig_devel에서 tig_release로 이전한다.
(squash merge -> history 유지 로 정책 변경)
tig_release과 tig_devel git을 비교하여 tig_release에 부족한 내용을 tig_devel에서 이전하라.
Commiter 정보는 변경되어도 상관 없으나, Author 정보가 변경되어서는 안 된다.
A8.
- What is Author and Committer??
tig 1.2 이전에는 minor version change마다 tig_devel에서 tig_release로 변경된 내용을 이전하였으나, tig 1.2부터는 각각의 commit을 tig_devel에서 tig_release로 이전한다.
(squash merge -> history 유지 로 정책 변경)
tig_release과 tig_devel git을 비교하여 tig_release에 부족한 내용을 tig_devel에서 이전하라.
Commiter 정보는 변경되어도 상관 없으나, Author 정보가 변경되어서는 안 된다.
$ git log --all --oneline --pretty="Author name: %an Committer name: %cn"
1-1. Author
- Author: 코드를 처음에 만듦 + 커밋도 한사람
- 그냥
$ git log
하면 나오는게 Author Name, Author Date
- how to fix author existing commit?
- 해당 커밋으로 checkout해서
$ git commit --amend --author="작성자명 <email 주소>"
$ git commit --amend --author="MarkYang <[email protected]>"
$ git commit --amend
후 직접 수정
1-2. Committer
-
Committer: Author 가 write하고 commit한 것을 기반으로 가장 최근에 Modify하고 커밋한 사람
-
How to check who is committer?
$ git config --list
현재 시스템에서 git commit 하면 반영되는 committer 정보$ git log --pretty="%cn"
1. squash를 시작할 커밋으로 checkout
$ git checkout 4c6fabc2
- 시작할 커밋을 HEAD로 rebase -i [포함할 커밋의 부모(^ -1 커밋)]
(4c6fabc2) $ git rebase -i 800a900c
 ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ 포함할 커밋의 부모!!!!!!
포함 시작할 커밋에서!!!
- 아래와 같은 화면으로 바뀐다.
- 아래와 같이 골라서 수정한다.
- 커밋 메시지 수정 화면이 뜬다.
- 기존에 있던게 하나로 싹 합쳐져서 없어지는게 아닌 새로운 분기로 만들어짐
- checkout 해서 새 Tag 붙임
$ git checkout bdc97fef
(bdc97fef) $ git tag tig-0.1_new
- 또 tig-0.2를 squash
$ git checkout 6706b2b
(6706b2b) $ git rebase -i 4c6fabc2
커밋메시지 수정
$ git checkout cf734590
$ git tag tig-0.2_new
- rebase는
(HEAD) $ git rebase <TARGET BRANCH>
로 사용
$ git checkout bdc97fef
(bdc97fef) $ git rebase <tig-0.2의 직전 브랜치>
Q9.
그냥 메이저마다 $ git tag [TAG NAME]
Author And Source
이 문제에 관하여(Git test), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@markyang92/Git-test저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)