일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Mac
- dataframe
- numpy
- Java
- PostgreSQL
- SQL
- Github
- google apps script
- Google Excel
- Redshift
- PANDAS
- 파이썬
- matplotlib
- c#
- Python
- Tkinter
- Kotlin
- array
- math
- GIT
- string
- PySpark
- django
- hive
- Apache
- Excel
- gas
- Google Spreadsheet
- list
- Today
- Total
달나라 노트
5. 버전 관리 본문
버전 관리의 효용성 : git log -p
버전 관리는 다음과 같은 큰 장점이 있습니다.
1. GIT은 과거 버전과 현재 버전의 차이를 확인할 수 있습니다.
2. 과거의 어떤 시점으로 롤백이 가능합니다.
git log라는 명령어는 commit history를 출력해주는 기능을 가지고있습니다.
이 git log라는 명령어에 옵션을 추가해서 좀 더 자세한 commit history를 확인할 수 있습니다.
git log -p
(git bash의 콘솔 창에서 복사/붙여넣기 단축키는 ctrl c/v가 아니라 ctrl insert/shift insert입니다.)
(ctrl c/v를 누르면 복사/붙여넣기가 되지 않고 다른 글자가 써지게됩니다.)
일단 저희가 지금까지 총 3번의 commit을 했으므로 git log -p의 결과에 의해 총 3개의 commit이 확인되는걸 보실 수 있습니다.
위 이미지를 보시면 총 3개의 commit id가 있고 각 commit id별로 어떠한 내용이 commit되었는지를 명시하고 있습니다.
위 내용을 해석하기 전에 한 가지 알아야 할 것은 git에선 +라는 표기는 commit 후의 파일 또는 내용을 의미하고 -라는 표기는 commit 전의 파일이나 내용을 의미합니다.
1. commit message 1
일단 가장 아래에 있는 commit message 1이 적힌 commit을 봅시다.
--- /dev/null
+++ b/f1.txt
위와 같은 부분을 봅시다.
--- 표시는 해당 commit 이전에 파일이 어떠했는지를 알려주는 것입니다.
위에선 --- 표시가 null로 되어있으므로 commit 이전엔 f1.txt라는 파일이 없었다는 뜻입니다.
그리고 +++라는 표시는 해당 commit을 한 후 파일이 어떠한지를 나타내줍니다.
+++ 부분에 f1.txt라는 파일이 적혀있으므로 commit을 함으로서 f1.txt파일이 생겼다는 것을 알 수 있습니다.
이렇게 --- 또는 +++ 기호에 적힌 것은 commit 전/후의 file 내역을 표시해줍니다.
+test contents
또한 위 부분이 보이시나요?
+라고 적혀있으니 이것은 commit을 하고나서의 내용을 표현하는 것입니다.
또한 +가 하나만 적혀있는 부분은 바로 commit 하고나서 file에 적힌 내용을 보여줍니다.
사실 위 부분도 -(어떤 내용) 표시와 짝을 이루고 있어야 합니다만 f1.txt파일이 commit 전에는 없었으므로 commit 전에 f1.txt의 내용도 없었을 것입니다.
따라서 - 부분은 없고 + 부분만 있습니다.
결론적으로 위 내용은 commit 후에 f1.txt 파일에 test contents라는 내용을 적었다는 뜻입니다.
2. commit message 2
commit message 2가 적힌 두 번째 commit을 봅시다.
--- a/f1.txt
+++ b/f1.txt
제가 두 번째 commit에선 f1.txt의 파일 이름은 그대로 두고 파일 내용에다가 second ecit of f1 txt라는 내용을 두 번째 줄에 추가하기만 했습니다.
따라서 파일의 내용 수정만 이뤄졌기 때문에 위 내용처럼 file 관련 변화는 없는 것처럼 보입니다.
또한 f1.txt 파일의 내용은 다음과 같습니다.
test contents
second ecit of f1 txt
test contents
+second ecit of f1 txt
따라서 위 부분을 보면 기존 내용인 test contents라는 글씨 아래에 second ecit of f1 txt라는 내용이 추가된 것을 알 수 있습니다.
3. commit message 3
commit message 3이 적힌 세 번째 commit에는 기존 commit과는 다르게 2개의 파일(f1.txt, f2.txt)에 대해 commit이 이뤄졌습니다.
f1.txt라는 파일은 기존 내용에 third edit of f1 txt라는 내용을 추가하고 기존에 second ecit of f1 txt라는 글씨를 second edit of f1 txt로 오타를 수정하였습니다.
또한 f2.txt 파일을 새로 생성하였고 이 파일에는 test contents2라는 내용을 추가하였습니다.
이제 내용 해석을 해봅시다.
--- a/f1.txt
+++ b/f1.txt
일단 위 내용처럼 f1.txt 파일 이름의 변화는 없습니다.
test contents
-second ecit of f1 txt
+second edit of f1 txt
+third edit of f1 txt
위 내용을 보면 -second ecit of f1 txt라는 부분은 second ecit of f1 txt라는 내용이 사라졌다는 것을 의미합니다.
+second edit of f1 txt라는 부분은 second edit of f1 txt라는 내용이 추가되었다는 것을 의미합니다.
이 두 부분을 조합해서 ecit라는 글자의 오타를 edit라고 수정했다는 것을 알 수 있습니다.
+third edit of f1 txt라는 부분은 보면 third edit of f1 txt라는 내용을 추가했다는 것을 의미합니다.
여기서 끝이 아닙니다 좀 더 아래를 보면 f2.txt라는 파일 관련 내용도 보입니다.
--- /def/null
+++ b/f2.txt
위 내용으로부터 f2.txt라는 파일이 없었다가 f2.txt파일이 생성되었고 이 commit으로 인해 이 파일이 commit되었다는 것을 알 수 있습니다.
+test contents 2
또한 위 내용으로 보아 f2.txt파일에 test contents 2라는 내용이 추가되었다는 것도 알 수 있습니다.
git log -p라는 명령어를 쓰면 내용이 너무 많아 하나의 콘솔 창에 다 표시되지 않을 때가 있습니다.
이럴 땐 엔터를 계속 치면 추가적인 내용을 한 줄씩 더 볼 수 있으며 다 봤을 경우 q키를 입력하면 다시 메인 콘솔 창으로 돌아와집니다.
1. 기존 f1.txt 파일의 내용을 수정해보려고 합니다.
test contents
second edit of f1 txt
third edit of f1 txt
위와 같은 내용을 아래와 같이 수정합니다.
second edit of f1 txt
third edit of f1 txt
test
가장 윗 줄인 test contents라는 글자는 지우고 비어있는 line으로 만듭니다.
그리고 가장 아랫줄에 test라는 글자를 추가하였습니다.
2. 이 상태로 f1.txt가 modified된 것을 확인합니다.
3. commit message 4라는 commit message를 적고 commit을 완료합니다.
4. commit 완료!
5. 자 이제 git log -p로 commit history를 봅시다.
commit message 4인 부분을 볼까요.
--- f1.txt
+++ f1.txt
위 내용처럼 file 이름의 변화는 없습니다.
-test contents
+
second edit of f1 txt
third edit of f1 txt
+test
위 내용으로 보면 먼저 test contents라는 내용을 삭제했다는 것을 알 수 있습니다.
그리고 +만 적힌 것이 있는데 test contents가 삭제된 후 아무 내용이 없는 채로 한 줄이 남아있다는 내용을 의미합니다.
또한 +test라는 부분으로부터 가장 마지막 줄에 test라는 내용이 추가된 내역을 확인할 수 있습니다.
git diff
git log는 현재까지 모든 commit의 정보를 나타내주는 명령어입니다.
그런데 내가 어떤 두 commit간의 차이를 알고싶다면 어떻게 해야할까요?
이럴 떈 바로 git diff 명령어를 사용하면 됩니다.
git diff commit id 1..commit id 2
1. git log를 통해 두 commit(commit message 1과 commit message 2)의 commit id를 확인합니다.
commit message 1의 commit id = 497b3643f1c73fed89b778fcde75718081761f7e
commit message 2의 commit id = f47e73ab5a85878808b3d202d3e63524fee960bb
2. 2번은 git diff 명령어를 이용하여 ..을 기준으로 왼쪽에는 commit message 1의 commit id를 적었고 오른쪽에는 commit message 2의 commit id를 적었습니다.
이것의 의미는 commit 1에서 commit 2로 변하는 동안 어떤 변화가 있었는지를 나타내줍니다.
--- a/f1.txt
+++ b.f1.txt
일단 파일 이름의 변화는 없는 것으로 확인됩니다.
test contents
+second ecit of f1 txt
위 내용을 보면 commit 1과 commit 2간의 차이는 f1.txt 파일의 내용에 second ecit of f1 txt라는 내용이 추가된 것이라는 것을 확인할 수 있습니다.
3. 그러면 만약에 git diff 명령어의 ..을 기준으로 왼쪽에 commit message 2의 commit id를 적고 오른쪽엔 commit message 1의 commit id를 적으면 어떻게 될까요?
이렇게 적는다면 commit 2에서 commit 1로 변할 때 어떤 차이가 있는지를 나타냅니다.
test contents
-second ecit of f1 txt
위 내용을 보면 commit 2에서 second ecit of f1 txt라는 내용을 추가했으므로 commit 2에서 commit 1으로 간다면 second ecit of f1 txt라는 내용이 없어졌다고 볼 수 있습니다.
따라서 위 내용에 -second ecit of f1 txt라는 내용으로부터 second ecit of f1 txt라는 내용이 삭제됨을 알 수 있습니다.
그렇다면 만약 commit 간에 한 단계가아니라 여러 단계간의 차이를 git diff 명령어를 통해 파악하면 어떨까요?
예를들어서 첫 번째 commit과 네 번째 commit의 차이를 알아보는 것이죠.
그 내용은 다음과 같습니다.
1. 첫 번째 commit과 네 번째 commit의 차이를 알려면 먼저 이 두 commit간의 id를 알아내야겠죠?
git log 명령어를 이용해서 이를 알아냅니다.
첫 번째 commit의 commit id = 497b3643f1c73fed89b778fcde75718081761f7e
네 번째 commit의 commit id = 01a7d6493ff8a4deeac98333e4e37dc029ec39ed
2. git diff를 이용해 이 두 commit 간의 차이를 봅시다.
git diff 명령어의 ..을 기준으로 왼쪽에는 첫 번째 commit id를 적었고 오른쪽에는 네 번째 commit id를 적었기 때문에 첫 번째 commit에서 네 번째 commit으로 변할 때 내용에 어떤 변화가 있는지를 나타내줄 것입니다.
이 경우 첫 번째 commit과 네 번째 commit 사이의 모든 변화 내역을 알려주는게 아니라 첫 번째 commit의 결과와 네 번째 commit의 결과만을 가지고 이 두 결과의 차이를 보여주게 됩니다.
먼저 f1.txt 파일의 변경내역을 봅시다.
--- a/f1.txt
+++ b.f1.txt
일단 f1.txt 파일의 이름 변경은 없군요.
-test contents
+
+second edit of f1 txt
+third edit of f1 txt
+test
위 내용을 보면 뭔가 굉장히 많죠.
일단 첫 번째 commit의 내용을 되새겨봅시다.
첫 번째 commit에서는 f1.txt파일을 생성하여 가장 첫 줄에 test contents라는 내용을 입력하였고 이를 commit하였습니다.
git diff 명령어는 첫 번째 commit이 완료된 후의 상태와 네 번째 commit이 완료된 상태를 비교합니다.
첫 번째 commit으로 인해 test contents라는 글자가 추가되었고 추가된 test contents라는 글자는 네 번째 commit에서 사라지게 됩니다.
따라서 첫 번째 commit의 결과로 생겼던 test contents라는 글자가 네 번째 commit의 결과에선 사라졌으므로 -test contents라고 표시됩니다.
네 번째 commit의 결과 test contents라는 글자가 사라지며 해당 line을 공백으로 남겨뒀기 때문에 그냥 +라는 키워드만 출력됩니다.
그리고 네 번째 commit 결과 첫 번째 commit 결과에는 없었던 second edit of f1 txt, third edit of f1 txt, test등의 글자가 생겼으니 이 내용들이 + 키워드로 표시되고 있습니다.
이렇게 git diff 키워드는 commit 사이의 단계가 얼마나 차이나건 상관없이 명시한 두 개의 commit 간의 차이를 나타내줍니다.
'Github' 카테고리의 다른 글
7. help 키워드로 명령어들에 대한 상세 설명 보기 (0) | 2021.01.15 |
---|---|
6. 버전 되돌리기 맛보기(reset, revert) (0) | 2021.01.15 |
4. 선택적 commit (0) | 2021.01.15 |
3. add, commit (0) | 2021.01.15 |
2. GIT의 시작 (0) | 2021.01.15 |