개발/Git

Git 사용 매뉴얼

LukeHan1128 2024. 3. 3. 20:00
반응형

 

 

Git 설치

 

위의 주소로 접속하여 자신의 OS 환경에 맞는 버전을 다운로드 하여 설치한다.

 

 

 

 

기본 명령어

명령어 설명 예시
clone 저장소를 로컬 환경으로 복제하기 위해 사용한다. git clone https://github.com/lukehan/Pople_Server.git
status 현재 local branch 상태를 확인한다. git status
add 변경 사항을 commit 하기 위해서 add 한다. add 하지 않은 대상은 commit 에서 제외된다. # 전체 add 하는 경우
git add .

# 특정 파일만 add 하는 경우
git add index.html
commit add 한 목록을 commit 한다. git 은 commit 이력으로 형상을 관리한다. git commit -m "Update code"
fetch 로컬에서 원격으로 변동 사항 여부가 있는지 확인하기 위해 사용한다. git fetch
pull 원격 변경 사항이 있는 경우 최신 버전을 로컬 환경으로 가져오기 위해 사용한다.
해당 명령어 실행 전 변경 사항이 없어야 하며 있는 경우 commit 혹은 변경 사항을 제거해야 한다.
git pull
push 로컬에서 commit 한 내역을 원격으로 push 한다. git push
branch branch 관련 명령어로 로컬에서 branch 를 생성할 수 있으며, 로컬, 원격 branch 목록을 확인할 수 있다.
(branch 생성은 가능하면 github 에서 하는 것을 권장)
# branch 로컬 생성
git branch new_branch

# local 목록 확인
git branch

# 원격 목록 확인
git branch -r

# 모든 목록 확인
git branch -a
checkout 현재 작업 중인 branch 를 변경한다. git checkout
log commit 이력을 확인할 수 있다. # 현재 branch 의 이력을 확인할 수 있다.
git log

# 모든 branch 의 이력을 그래프 형식으로 확인할 수 있다.
git log --all --graph

 

git 에서 보편적으로 사용하는 명령어 목록이다.

위의 명령어를 숙지한 후 아래 내용에 따라 형상 관리를 진행 한다.

 

전체 명령어에 대한 설명은 어려우니 개발 진행 시 필요한 최소한의 명령어 및 사용 방법에 대한 방법을 아래와 같이 안내한다.

 

 

 

 

Clone

git 명령어 숙지를 위해 개인 저장소를 생성하여 연습을 진행한다.

 

 

 

우측 상단의 Code 버튼을 클릭 실행하면 위와 같이 창이 나타나는 것을 확인할 수 있다.

상단 Local > HTTPS 를 클릭 선택한 후 git url 옆의 복사 버튼을 클릭 실행하여 url 을 복사 한다.

 

 

 

 

키보드 Window key + R 키를 입력하면 위와 같이 창이 나타날 것이다.

cmd 를 입력하여 실행한다.

 

 

 

 

위와 같이 cmd 창이 나타날 것이다.

 

 

 

 

# 위치 변경
> cd C:\Users\lukehan\Downloads\Works

# 저장소 복제
> git clone https://github.com/lukehan/TestForGit.git

Cloning into 'TestForGit'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (4/4), done.

# 복제한 저장소로 이동
> cd TestForGit

위와 같이 입력하여 저장소를 복제할 위치로 이동한 후 저장소를 복제한다.

 

 

 

 

status

# 상태 확인
> git status

On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

status 를 입력하여 상태를 확인한다.

현재 사용 중인 branch 는 main 인 것을 확인할 수 있으며, 변경 사항이 없는 것을 확인할 수 있다.

이후 git 명령어 사용 시 status 를 사용하여 상태를 확인한 후 진행하는 것을 권장한다.

 

 

 

 

fetch

원활한 테스트를 위해 아래와 같이 신규 branch 를 생성한다.

 

develop branch 로 선택한 후 상단 입력 창에 테스트 할 branch 명을 입력한다.

해당 문서에서는 test_231127 로 branch 를 생성하여 진행 하였다.

 

입력이 완료되면 Create branch: test_231127 from 'develop' 으로 변경된 것을 확인할 수 있다.

해당 항목을 클릭 실행하여 branch 를 생성한다.

 

 

 

 

위와 같이 branch 가 생성된 것을 확인할 수 있다.

확인이 완료되면 다시 cmd 창으로 이동한다.

 

 

 

 

# 변경 사항 확인
> git fetch

From https://github.com/lukehan/TestForGit
 * [new branch]      test_231127 -> origin/test_231127

fetch 명령어를 실행하면 위와 같이 신규 branch 가 생성된 것을 확인할 수 있다.

 

 

 

 

checkout

# 작업 branch 변경
> git checkout test_231127

Switched to a new branch 'test_231127'
branch 'test_231127' set up to track 'origin/test_231127'.


> git status

On branch test_231127
Your branch is up to date with 'origin/test_231127'.

nothing to commit, working tree clean

위와 같이 checkout 명령어를 실행하여 신규 생성한 branch 로 checkout 한다.

status 명령어로 현재 branch 정보를 확인할 수 있다.

 

 

 

 

add and commit

add commit 명령어를 숙지하기 전 환경 구성을 진행한다.

 

# add 및 commit 을 진행 할 파일 생성
> echo "test1" > test1.txt

> echo "test2" > test2.txt

> echo "test3" > test3.txt


# 파일 확인
>git status
On branch test_231127
Your branch is up to date with 'origin/test_231127'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test1.txt
        test2.txt
        test3.txt

nothing added to commit but untracked files present (use "git add" to track)

위와 같이 입력하여 test1.txt test2.txt test3.txt 파일을 생성한다.

status 명령어로 추가된 파일을 확인할 수 있다.

 

 

 

 

# commit 진행 시 반영할 파일 선택 - test1.txt
> git add test1.txt


# 확인
> git status
On branch test_231127
Your branch is up to date with 'origin/test_231127'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   test1.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test2.txt
        test3.txt

 

commit 진행 시 대상 파일을 지정한다. 위의 경우 test1.txt 파일을 지정하여 진행 하였다.

add 한 후 status 로 확인해 보면 test1.txt 파일이 추가되었음을 확인할 수 있다.

 

 

 

 

# commit 진행
> git commit -m "Update test1.txt"


# 확인
> git status
On branch test_231127
Your branch is ahead of 'origin/test_231127' by 1 commit.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test2.txt
        test3.txt

nothing added to commit but untracked files present (use "git add" to track)

위와 같이 입력하여 commit 을 진행한다.

commit 후 status 를 입력하여 확인해 보면 위와 같이 추가한 test1.txt 만 반영된 것을 확인할 수 있다.

 

 

 

 

# 전체 반영
> git add .


# 확인
> git status

On branch test_231127
Your branch is ahead of 'origin/test_231127' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   test2.txt
        new file:   test3.txt

 

모든 변경 사항을 반영하기 위해 파일 대신 . 을 입력 진행 하였다.

status 로 확인 시 전체 파일이 추가된 것을 확인할 수 있다.

 

 

 

 

# commit
> git commit -m "Update test2 and test3"

[test_231127 ca4cd61] Update test2 and test3
 2 files changed, 2 insertions(+)
 create mode 100644 test2.txt
 create mode 100644 test3.txt


# 확인
> git status

On branch test_231127
Your branch is ahead of 'origin/test_231127' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

위에서 추가한 test2.txt test3.txt 가 commit 반영된 것을 확인할 수 있다.

 

 

 

 

# 원격 저장소로 업로드
> git push

Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 20 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (7/7), 601 bytes | 601.00 KiB/s, done.
Total 7 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/lukehan/TestForGit.git
   c829cba..ca4cd61  test_231127 -> test_231127

위에서 commit 한 사항을 push 명령어를 이용하여 원격 저장소로 업로드 진행한다.

 

 

 

 

위와 같이 업로드 된 것을 확인할 수 있다.

 

 

 

 

pull

pull 진행을 위해 환경 구성을 진행한다.

 

상단에서 진행 중인 branch 를 선택한 후 목록에서 test1.txt 를 클릭 실행한다.

 

 

 

 

우측 연필 모양 아이콘을 클릭 실행하여 파일 수정을 진행한다.

 

 

 

 

편집 화면이 나타나면 하단에 수정 내용을 추가한 후 우측 상단 Commit changes... 버튼을 클릭 실행한다.

 

 

 

 

위와 같이 commit 내용 입력 창이 나타날 것이다.

메세지 및 설명을 작성한 후 하단 Commit changes 를 클릭 실행하여 변경 사항을 반영한다.

 

 

 

 

위와 같이 변경 사항이 반영된 것을 확인한다.

 

 

 

 

# 원격 저장소 변경 사항 확인
> git fetch

remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 653 bytes | 59.00 KiB/s, done.
From https://github.com/lukehan/TestForGit
   ca4cd61..9a5f312  test_231127 -> origin/test_231127


# 확인
> git status

On branch test_231127
Your branch is behind 'origin/test_231127' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

 

위와 같이 입력하여 원격 저장소 변경 사항을 확인한다.

변경 사항이 있을 경우 status 에서 업데이트할 항목이 있으니 pull 하라는 메시지를 확인할 수 있다.

 

 

 

 

# 원격 저장소 변경 사항을 로컬 저장소로 업데이트
> git pull

Updating ca4cd61..9a5f312
Fast-forward
 test1.txt | 2 ++
 1 file changed, 2 insertions(+)


# 확인1
> git status

On branch test_231127
Your branch is up to date with 'origin/test_231127'.

nothing to commit, working tree clean


# 확인2
> type test1.txt
"test1"

edit from remote

pull 명령어를 입력하여 원격 저장소의 변경 사항을 로컬 저장소에 반영한다.

status 명령어를 입력하여 반영할 사항이 없는 것을 확인할 수 있으며,
type 명령어를 통해 내용이 변경된 것을 확인할 수 있다.

 

 

 

 

conflict 발생 시 처리 방법

conflict 발생 시 처리 방법을 학습하기 위해 환경 구성을 진행한다.

 

위와 같이 develop branch 에서 conflict 를 유발할 branch 를 생성한다.

 

 

 

 

branch 가 생성되면 해당 branch 에 conflict 를 유발할 파일을 생성하기 위해 Add file > Create new file 버튼을 클릭 실행한다.

 

 

 

 

위와 같이 편집 화면이 나타나면 상단에 파일 명 test1.txt 를 입력한 후 하단에 파일 내용을 입력한다.

입력이 완료되면 우측 상단의 Commit changes... 버튼을 클릭 실행한다.

 

 

 

 

위와 같이 commit 메시지 설정 창이 나타나면 메시지 및 내용을 추가한 후 하단의 Commit changes 를 클릭 실행하여 반영한다.

 

 

 

 

Pull Request

수정 사항이 이상 없이 commit 된 것을 확인하였으면 상단 탭 메뉴 Pull requests 를 클릭 실행한다.

상단에서 Compare & pull request 버튼이 나오면 branch 를 확인하여 해당 버튼을 클릭 실행한다.

 

만약 해당 버튼을 찾을 수 없다면 New pull request 를 클릭 실행한다.

 

 

 

 

Comparing changes 화면 상단에서 base 를 develop 으로, compare 를 conflict 유발 branch 로 선택한다.
해당 문서의 경우 test_231127_for_conflict 로 설정 진행한다.

설정이 완료되면 우측 Create pull request 버튼을 클릭 실행한다.

 

 

 

 

Open a pull request 화면 상단에서 base compare 설정이 이상 없는지 확인한다.

이상이 없다면 PR(Pull Request) 제목과 내용을 입력한 후 우측 하단 Create pull request 를 클릭 실행한다.

 

 

 

 

PR 이 완료되면 위와 같이 나타나는 것을 확인할 수 있다.

 

 

 

 

Merge

저장소 환경 구성에 따라 merge 가능한 권한이 다를 수 있다.

해당 문서는 merge 가능한 경우를 상정하여 진행한다.

 

위의 PR 완료 화면 하단의 Merge pull request 버튼을 클릭 실행한다.

 

위와 같이 변경되는 것을 확인할 수 있다.

변경 필요 사항이 없는 경우 하단 Confirm merge 버튼을 클릭 실행하여 merge 를 진행한다.

 

 

 

 

이상 없이 merge 가 진행된 것을 확인할 수 있다.

merge 완료된 branch 를 유지하면 저장소의 공간을 차지하니,
특별한 사유가 없다면 우측의 Delete branch 를 클릭 실행하여 branch 를 삭제한다.

 

 

 

 

Conflict 사항이 적은 경우 - github 에서 수정하기

conflict 를 유발하기 위해 PR 을 생성한다.

 

위와 같이 base 는 develop 으로, compare 는 test_231127 로 설정하면 Can't automatically merge 메시지가 나오는 것을 확인할 수 있다.

이 메시지가 나오는 경우 충돌이 발생하는 코드가 있다는 의미이다. 개발 중 발생한다면 확인 후 문제를 해결해야 한다.

 

좌측 Create pull request 버튼을 클릭 실행한다.

 

 

 

 

상단에서 base compare 정보를 확인한 후 이상 없으면 하단의 Create pull request 버튼을 클릭 실행한다.

 

 

 

 

conflict 가 발생했다면 위와 같이 화면이 나타날 것이다.

문제되는 사항이 많지 않다면 위와 같이 Resolve conflicts 버튼이 활성화 되어 있을 것이며,
해당 버튼을 클릭 실행하여 수정 진행할 수 있다.

Resolve conflicts 버튼을 클릭 실행한다.

 

 

 

 

위와 같이 Resolving conflicts 화면을 확인할 수 있다.

좌측에서 conflict 가 발생한 파일을 확인할 수 있으며 파일을 클릭 선택하는 경우 우측에서 수정할 수 있다.

 

 

 

 

# 형식

<<<<<< branch 명 1
Conflict 발생 구간 코드 내용 in branch 1
======
Conflict 발생 구간 코드 내용 in branch 2
>>>>>> branch 명 2


# 예시

<<<<<< test_231127
"test1"

edit from remote
======
this file for conflict
>>>>>> develop

conflict 가 발생한 구간은 위와 같이 구분할 수 있다.

conflict 발생하는 코드를 확인하여 발생하지 않도록 변경한다.

 

변경이 완료되면 우측 상단의 Mark as resolved 버튼을 클릭 실행한다.

 

 

 

 

변경 사항이 이상 없으면 좌측 파일 명에 이상 없음을 표시하는 마크가 생성되며
우측 상단 버튼이 Commit merge 로 변경된 것을 확인할 수 있다.

Commit merge 를 클릭 실행한다.

 

 

 

 

위와 같이 merge 가 진행 가능한 것을 확인할 수 있다.

 

 

 

 

Conflict 사항이 많은 경우 - 로컬에서 수정하기

conflict 가 발생하는 사항이 많거나 혹은 로컬 환경에서 수정해야 하는 경우 진행한다.

 

위의 화면에서 command line 을 클릭 실행하면 진행 순서를 설명하는 내용을 확인할 수 있다.

해당 문서는 github 에서 제공하는 내용과 동일하게 진행할 것이다.

 

 

 

 

# develop branch 의 변경 사항을 로컬로 가져온다.
> git pull origin develop

From https://github.com/lukehan/TestForGit
 * branch            develop    -> FETCH_HEAD
Auto-merging test1.txt
CONFLICT (content): Merge conflict in test1.txt
Automatic merge failed; fix conflicts and then commit the result.

로컬 저장소 cmd 창으로 이동하여 위와 같이 입력하여 conflict 사항을 로컬 저장소로 가져온다.

 

 

 

 

# test1.txt 파일 내용을 확인한다.
> type test1.txt
<<<<<<< HEAD
"test1"

edit from remote
=======
this file for conflict
>>>>>>> eab3f296d8f79465bc45ddbe8e204c6da1d76241

위와 같이 test1.txt 파일의 내용을 확인해 보면 conflict 가 발생한 것을 확인할 수 있다.

conflict 가 발생하는 모든 파일을 확인하여 수정한다.

 

 

 

 

> git add .
> git status

On branch test_231127
Your branch is up to date with 'origin/test_231127'.

All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:
        modified:   test1.txt
        deleted:    test2.txt
        deleted:    test3.txt


> git commit -m "fix conflict"
[test_231127 14f01cc] fix conflict


> git status
On branch test_231127
Your branch is ahead of 'origin/test_231127' by 7 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

수정이 완료되면 위와 같이 add 및 commit 을 진행한다.

 

 

 

 

> git checkout test_231127
Already on 'test_231127'
Your branch is ahead of 'origin/test_231127' by 7 commits.
  (use "git push" to publish your local commits)


> git merge develop
Already up to date.

merge 진행할 branch 로 checkout 한 후 merge 를 진행한다.

merge 가 이상 없이 진행될 경우 Already up to date 메시지를 확인할 수 있다.

 

 

 

 

> git push -u origin test_231127

Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 335 bytes | 335.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/lukehan/TestForGit.git
   0c28db5..14f01cc  test_231127 -> test_231127
branch 'test_231127' set up to track 'origin/test_231127'.

위와 같이 입력하여 conflict 해결 사항을 원격 저장소로 push 진행한다.

 

 

 

 

위와 같이 merge 가 진행 가능한 것을 확인할 수 있다.

 

 

반응형