코드스테이츠 백엔드 부트캠프 4일차 [Git 기초]

wish17·2022년 12월 19일
0
post-thumbnail

[SEB BE] Section 1

[Git 기초]

시작하면서

지금 실행 중인 텍스트 에디터에서는 Ctrl + z를 여러 번 눌러 이전 상태로 돌아갈 수 있지만 만약 코드 수정 후 에디터를 종료했다면, 이전 상태로 돌아갈 수 없기 때문에 유지보수 측면에서 이전에 작성한 내용을 보존해야 할 필요가 있다.

이전에 작성한 내용을 보존해 주는 시스템이 있는데 이 시스템이 버전 관리 시스템(Version Control System)이다.

버전 관리 시스템(Version Control System) 중 가장 많이 쓰이는 도구, Git을 학습해보자.

학습목표

  • Git의 환경설정을 할 수 있다.
  • 버전 관리 시스템의 필요성을 이해할 수 있다.
  • Github과 Git의 관계에 대해 이해할 수 있다.
  • Repository에 대해 이해할 수 있다.
    • Local Repository와 Remote Repository의 차이를 이해할 수 있다.

버전 관리 시스템 - Git

개요

위 내용 외에도 Git으로 관리되는 파일은 Github, GitLab, Bitbucket 등의 여러 가지 원격 저장소를 이용해서 백업과 협업을 할 수 있다는 장점이 있다.

Github

Git은 소스 코드 기록을 관리하고 추적할 수 있는 버전 관리 시스템

Github는 Git Repository를 관리할 수 있는 클라우드 기반 서비스
추가 저장장치가 필요없는 백업용 공간이자 개발자의 sns같은거다.

Git repository

  • 말 그대로 저장소
  • Git으로 관리되는 폴더

Git repository 는 Remote Repository와 Local Repository 두 종류의 저장소를 제공한다.

작업할 때는 Local Repository에서 할 수 있고 내가 작업한 코드를 공유하려면 Remote Repository에 업로드해 여러 사람이 함께 공유할 수 있다.

다른 사람이 Remote Repository에 올려놓은 소스 코드를 내 Local Repository 로 가지고 올 수도 있다.

Fork

원격 저장소를 내 원격 저장소로 가지고 오는 작업

Clone

내 원격 저장소(Remote Repository)에서 내 컴퓨터로 가져오는 작업

Push

내 컴퓨터에서 변경 작업을 완료한 내용을 commit을 통해 저장해준 뒤, Remote Repository에 반대로 올려주는 작업

Pull

Push를 완료하고 나면 GitHub에는 Pull request라는 기능이 있어서, 내가 제안한 코드 변경사항에 대해 반영 여부를 요청할 수 있다.

위 그림 출처 : designless.net

학습목표

  • Git의 탄생 배경과 Git이 제공하는 유용한 기능을 이해함으로써, Git이 무엇인지 이해한다.
  • Git과 Github의 차이를 설명할 수 있다.

Git이란?

쉽게 말해 파일을 관리해주는 프로그램이다.

  • 파일의 변경 사항을 추적하며, 사용자가 각 파일의 버전을 관리할 수 있게 도와준다.
  • 파일을 백업할 수 있게 해준다.
  • 협업자들과 함께 파일을 공유하고, 각자의 작업물을 취합할 수 있게 해준다.

Git으로 할 수 있는 것

Git이 관리하는 디렉토리(폴더)에 어떤 문서를 만들면 Git으로 그 문서의 버전을 관리할 수 있다.

  • 백업하기

    • 작업물을 온라인 원격 저장소에 백업할 수 있도록 백업 기능을 제공해준다.
  • 협업하기

    • 여러 작업자가 하나의 작업물의 다른 부분을 각자 작업할 때, 작업물을 공유하고 취합할 수 있게 도와준다.
  • 버전관리


Git과 Github

일반적으로 Git 자체는 로컬에서 버전을 관리해주는 프로그램을 의미한다.
원격 저장소 기능을 제공해주는 서비스 중 하나가 Github이고 이 서비스를 이용해 백업 기능을 사용하고 협업할 수 있다.

조금 더 구체적으로 설명하자면, Github은 Git이 설치되어져 있는 클라우드 저장소이다.

Git은 로컬에서 버전을 관리해주는 프로그램이며, Github은 Git을 클라우드 방식으로 구현한 서비스이다.

위 그림 출처 : designless.net
  • add, commit, push : 온라인 원격 저장소에 업로드하는 과정
  • fork, clone : 협업자의 작업물을 나의 로컬에 다운로드 받는 과정
  • pull request : 상대 협업자에게 나의 작업 완성물을 취합해달라고 요청하는 과정
  • merge : 상대방의 작업물과 나의 작업물을 취합하는 과정

Git Workflow

개요

학습목표

  • 혼자 작업하는 경우의 workflow를 이해한다.
  • 함께 작업하는 경우의 workflow를 이해한다.
  • 상황에 따라 Github의 기능과 Git 명령어를 사용할 수 있다.
    • Fork
    • clone
    • status
    • restore
    • add
    • commit
    • reset
    • log
    • pull
    • push
    • init
    • remote add
    • remote-v
  • Git의 세 가지 영역 및 상태를 이해한다. (Committed, modified, staged)
  • Remote Repository를 페어와 공유하며 협업을 할 수 있다.
  • 충돌이 발생했을 경우 해결할 수 있다.

Advanced Challenge

  • Git Repository의 commit되지 않은 변경 사항을 취소할 수 있다.
reset HEAD <file>
checkout -- <file>
  • 협업을 위한 git 개념을 이해할 수 있다.
    • branch, merge의 개념
    • remote repository에서 origin과 upstream의 차이점

Git의 영역과 기본 명령어

Git의 영역은 Git으로 관리하는 파일이 위치하는 영역을 의미한다.

Git의 각 영역은 크게 온라인과 로컬로 나뉜다.

  • 온라인 : Remote repository(원격 저장소)

  • 로컬 : Work space(작업 공간), Staging area(스테이징 영역), Local repository(지역 저장소)

Git으로 파일 관리를 시작하기(Git 초기화) : git init

git init을 입력하면 git init을 입력한 위치의 모든 파일들이 Git의 관리를 받게 된다.

git init

1 기본 브랜치 이름 변경하기

  • 앞으로 git init을 입력했을 때에 생성되는 기본 브랜치의 이름을 다른 것으로 바꾸려면 아래의 명령어를 입력하면 된다.
git config --global init.defaultBranch 변경할_브랜치_이름

이 명령어를 입력하면 앞으로 git init을 입력했을 때 생성되는 기본 브랜치의 이름이 변경할_브랜치_이름으로 설정된다.

  • 현재 위치하는 브랜치의 이름을 바꾸려면 아래의 명령어를 입력하면 된다.
git branch -m 변경할_브랜치_이름

아래 코드를 입력하여 기본 브랜치 이름을 main으로 바꿔주고, 현재 브랜치의 이름도 main으로 바꾸자.

git config --global init.defaultBranch main
git branch -m main

error: refname refs/heads/master not found
fatal: Branch rename failed

기본 브랜치 이름을 바꾸는데는 문제가 없었지면 현재 브랜치 이름을 바꾸려 하자
master를 찾지 못해 변경하지 못했다는 에러가 나왔다.

브랜치가 없으면 만들면 되지 않을까? 생각이 들어 만들어 봤다.

마스터가 없어서 안된단다...

알고보니 버전 문제였다.

git --version 으로 git 버전을 확인할 수 있다.
2.28. 이상이어야 branch이름 변경이 가능하며, 2.28. 미만이라면 아래 명령어를 차례대로 입력해서 버전을 업그레이드 할 수 있다.

$ sudo add-apt-repository ppa:git-core/ppa -y
$ sudo apt-get update
$ sudo apt-get install git -y

버전 업데이트 후 문제 없이 해결됐다.


2 .git 디렉토리

git init을 입력하면 디렉토리 내에 .git 디렉토리가 생성된다.
그러나 ls -l 명령어로는 .git 디렉토리를 확인할 수 없다.
디렉토리나 파일 이름의 맨 앞에 .이 붙으면 해당 디렉토리 또는 파일이 숨김 처리되기 때문이다.

하지만 ls 명령어의 옵션으로 -a 를 붙여주면 숨김 처리된 디렉토리 및 파일을 확인할 수 있다.

아래와 같이ls -al 명령어를 통해 .git 파일의 존재를 확인할 수 있었다.

cf) .git 디렉토리를 실수로 삭제하면 Git 명령어가 제대로 동작하지 않게 되므로, .git 디렉토리를 숨김처리 해두는 것이다.


3 Work space

  • Work space는 Git의 세 가지 영역 중 하나로, Working tree 또는 Work tree라고도 하며, 눈으로 볼 수 있는 디렉토리 자체를 의미한다.
  • Git은 Work space를 자동으로 스캔한다.
  • Work space는 git init을 입력한 직후, 다른 어떠한 Git 명령어도 입력하지 않은 상태의 파일들이 존재하는 영역이다.

파일들의 상태를 확인하기 : git status

Git으로 관리되고 있는 파일들의 상태는 git status 명령어로 확인할 수 있다.

git status

결과가 안내하는 사항은 다음과 같다.

  • On branch main

    • 현재 브랜치는 main 브랜치다.
  • No commits yet

    • 아직 커밋을 하지 않았다는 의미
  • Untracked files: ~

    • Untracked는 Git의 관리 하에 있는 파일이 가질 수 있는 상태 중 하나
  • (use “git add <file>…” to include in what will be committed)

    • git add 파일_이름을 입력하면 커밋될 것들에 해당 파일을 포함시킬 수 있다는 의미
  • nothing added to commit but untracked files present (use "git add" to track)
    -

    • 아직 add된 파일들이 없으며 Untracked 상태의 파일이 존재하니, git add 명령어를 사용하라는 안내

여기서 눈여겨 보아야 할 내용

  • Untracked → 파일의 상태 중 하나

  • what will be committed → 커밋될 것들이 모여있는 무언가 → Git의 영역 중 Staging area를 의미

  • use git add to track → track하기 위해서는 git add 명령어를 사용해야 한다.


파일의 상태

Git의 관리 하에 있는 파일들의 상태는 크게 Tracked와 Untracked로 나뉘며, Tracked는 다시 Unmodified, Modified, Staged로 나뉜다.

  • Untracked

  • Tracked

    • Unmodified, Modified, Staged

말그대로 Git에 의해 추적되고 있는 상태, 추적되고 있지 않은 상태를 의미함.

Tracked 상태인 파일들은 수정되었을 때 Git이 파일의 변경 내용을 감지하지만, Untracked 상태인 파일들은 파일의 내용을 변경하여도 Git이 파일의 내용 변경을 감지하지 못한다.

Untracked 상태의 파일은 Commit이라는 과정을 거치면 Tracked 상태로 바뀐다.

Tracked의 세부 상태

  • Unmodified : 파일의 수정이 Git에 의해 감지되지 않은 상태

  • Modified : 파일의 수정이 Git에 의해 감지된 상태

  • Staged : 파일이 Staging area에 존재하는 상태

    • 기본적으로, Commit을 해야 Tracked 상태로 변경될 수 있지만, Commit을 하지 않은 파일도 예외적으로 Staged 상태를 가질 수 있다.

Staging area

Local repository에 저장할 파일들이 임시적으로 대기하는 영역을 의미한다.

Local repository에 파일을 저장하는 것은 단순히 파일을 저장하는 것 이외의 특별한 의미를 가진다. (추후 설명 보충)

Staging area로 파일을 이동시키는 명령어

git add

Staging area로 파일을 이동시키기 : git add

파일을 Local repository에 저장하고 버전을 기록하기 : git commit

함께 작업 workflow


vi 파일명을 통해 wish is the best 한줄 추가하고 파일명도 README.md에서 RRR.md로 바꿧다.
(vi 나올때 insert 누르고 :wq하면 저장 후 종료 :q하면 그냥 종료)


push전이라 깃허브에는 방금 한 수정이 적용되지 않았다.

그럼 push 해보자.

위와 같이 오류가 나와서 erase만 보고 파일명을 바꾸는게 삭제 후 다시 만드는 취급을 받는줄 알고 파일명을 원래대로 돌렸고 gh auth login를 다시해 깃허브와 재접속했더니 정상적으로 작동했다.

하고보니 add와 commit을 다시 안해서 결국 파일명은 바뀐 것을 확인할 수 있었다.

페어가 위와 마찬가지로 나에게 push 해줬을 때, pull을 해보았다.


fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists

위와 같이 오류가 나서 깃 연결이 제대로 되었나 확인해 보았지만 정상이다.

알고보니 주소를 잘못 입력했다.
그래서 git remote remove pair로 remote 한 주소를 삭제하고 다시 연결했다.


파일명을 DDD로 바꿔서 push 받았더니 오류가 나와 기존에 있던 README.md 파일을 DDD.md로 바꿔주고 다시 pull 해봤다.

commit을 안해서 오류가 났다. commit 후 다시 pull 해보았다.


또 오류가 나왔다.

hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only

병합할 수 없어서 발생하는 오류라는데 정확한 의미를 모르겠다.

그래도 이 세가지를 잘 쓰면 될 것 같아 시도해 보았다.

계속 시도하다 보니 git config pull.rebase false만 했더니

commit을 하란다.


commit 하니까 pull 성공했다.

의도적으로 충돌을 일으켰었다. vi 를 이용해 충돌 부분을 수정하고 내 repository push해서 동기화를 완료했다.

full 코드

push 보낸거

wjwee96@DESKTOP-38438M7:~$ ls
be-simple-git-workflow  clonetest  folderName  git_clone  gittest  gittest2  goodjob.txt  hello.java  hello_git  hello_git.txt  linux
wjwee96@DESKTOP-38438M7:~$ cd gittest2
wjwee96@DESKTOP-38438M7:~/gittest2$ ls -l
total 0
wjwee96@DESKTOP-38438M7:~/gittest2$ git clone https://github.com/wish9/pair1.1.git
Cloning into 'pair1.1'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 18 (delta 1), reused 17 (delta 0), pack-reused 0
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (1/1), done.
wjwee96@DESKTOP-38438M7:~/gittest2$ ls
pair1.1
wjwee96@DESKTOP-38438M7:~/gittest2$ cd pair1.1
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ ls
 README.md   git_practice_wee.txt   hello_git.txt  'test file.txt'
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git remote --v
origin  https://github.com/wish9/pair1.1.git (fetch)
origin  https://github.com/wish9/pair1.1.git (push)
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git remote add pair git@github.com:asetonhqs/git_practice.git
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git remote --v
origin  https://github.com/wish9/pair1.1.git (fetch)
origin  https://github.com/wish9/pair1.1.git (push)
pair    git@github.com:asetonhqs/git_practice.git (fetch)
pair    git@github.com:asetonhqs/git_practice.git (push)
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$


wjwee96@DESKTOP-38438M7:~$ ls
be-simple-git-workflow  clonetest  folderName  git_clone  gittest  gittest2  goodjob.txt  hello.java  hello_git  hello_git.txt  linux
wjwee96@DESKTOP-38438M7:~$ cd git
git_clone/ gittest/   gittest2/
wjwee96@DESKTOP-38438M7:~$ cd 3
-bash: cd: 3: No such file or directory
wjwee96@DESKTOP-38438M7:~$ cd gittest2
wjwee96@DESKTOP-38438M7:~/gittest2$ ls
pair1.1
wjwee96@DESKTOP-38438M7:~/gittest2$ cd pair1.1
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ ls
 README.md   git_practice_wee.txt   hello_git.txt  'test file.txt'
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ vi README.md
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ cat README
cat: README: No such file or directory
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ cat README.md
### this is README file for simple git workflow# be-simple-git-workflow

### please fork it and follow the instruction to get pair's code dynamically

<br />

이 Repository를 fork한 후 pair와 함께 Simple Git Workflow를 연습하세요.

<br />

이 스프린트는 제출할 필요는 없습니다.

wish is the best

wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ mv README.md RRR.md
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ ls
 RRR.md   git_practice_wee.txt   hello_git.txt  'test file.txt'
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    README.md

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

no changes added to commit (use "git add" and/or "git commit -a")
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git add .
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        renamed:    README.md -> RRR.md

wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git commit -m "파일명 변경, 한문장 추가"
[main 7341676] 파일명 변경, 한문장 추가
 1 file changed, 3 insertions(+)
 rename README.md => RRR.md (94%)
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git log
commit 734167645468136b363f006dbcb5251e96594997 (HEAD -> main)
Author: wish9 <wjwee9@gmail.com>
Date:   Tue Dec 20 20:04:45 2022 +0900

    파일명 변경, 한문장 추가

commit 489ea593ab5fecdcbcb4931700a2c0fbd0257358 (origin/main, origin/HEAD)
Author: SEB_BE_43_권순하 <asetonhqss@gmail.com>
Date:   Tue Dec 20 15:50:34 2022 +0900

    2nd testfile

commit 9f1e1e9a29c7d470dc6b65fd6ace12b9e5a790b0
Author: SEB_BE_43_권순하 <asetonhqss@gmail.com>
Date:   Tue Dec 20 15:37:00 2022 +0900

    2nd test

commit 2f85d97f7badca83d45b34231c246e9e8f8339d1
Author: SEB_BE_43_권순하 <asetonhqss@gmail.com>
Date:   Tue Dec 20 15:21:22 2022 +0900

    first test

commit fd68f3bbb947267b297893349cb579d50d1a1192
Author: SEB_BE_43_권순하 <asetonhqss@gmail.com>
Date:   Tue Dec 20 13:44:32 2022 +0900

    subject

commit 60c8f828fc52a93581996fe21a6c06e54eff8720
Author: SEB_BE_43_권순하 <asetonhqss@gmail.com>
Date:   Tue Dec 20 12:42:13 2022 +0900

wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ push origin main

Command 'push' not found, did you mean:

  command 'pdsh' from deb pdsh
  command 'rush' from deb rush
  command 'posh' from deb posh
  command 'ppsh' from deb ppsh

Try: sudo apt install <deb name>

wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git push origin main
gh auth git-credential: "erase" operation not supported
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/wish9/pair1.1.git/'
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ mv RRR.md README.md
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as wish9
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ git push origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 650 bytes | 650.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/wish9/pair1.1.git
   489ea59..7341676  main -> main
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ vi rr
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ ls
 README.md   git_practice_wee.txt   hello_git.txt   rr  'test file.txt'
wjwee96@DESKTOP-38438M7:~/gittest2/pair1.1$ re











pull 받는거

wjwee96@DESKTOP-38438M7:~$ cd gittest1
-bash: cd: gittest1: No such file or directory
wjwee96@DESKTOP-38438M7:~$ ls
be-simple-git-workflow  clonetest  folderName  git_clone  gittest  gittest2  goodjob.txt  hello.java  hello_git  hello_git.txt  linux
wjwee96@DESKTOP-38438M7:~$ cd gittest
wjwee96@DESKTOP-38438M7:~/gittest$ ls
be-simple-git-workflow
wjwee96@DESKTOP-38438M7:~/gittest$ mv be-simple-git-workflow pairtest1
wjwee96@DESKTOP-38438M7:~/gittest$ cd pairtest1
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ ls
README.md
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ remote --v
remote: command not found
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ remote add mypairtest https://github.com/wish9/mypairtest.git
remote: command not found
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ ls
README.md
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ cat README.md
### this is README file for simple git workflow# be-simple-git-workflow

### please fork it and follow the instruction to get pair's code dynamically

<br />

이 Repository를 fork한 후 pair와 함께 Simple Git Workflow를 연습하세요.

<br />

이 스프린트는 제출할 필요는 없습니다.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git add README.md
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ Git remote --v

Command 'Git' not found, did you mean:

  command 'wit' from deb wit
  command 'nit' from deb python-nevow
  command 'vit' from deb vit
  command 'git' from deb git

Try: sudo apt install <deb name>

wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote --v
origin  https://github.com/wish9/be-simple-git-workflow.git (fetch)
origin  https://github.com/wish9/be-simple-git-workflow.git (push)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote mypairtest https://github.com/wish9/mypairtest.git
error: unknown subcommand: `mypairtest'
usage: git remote [-v | --verbose]
   or: git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <name> <url>
   or: git remote rename [--[no-]progress] <old> <new>
   or: git remote remove <name>
   or: git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
   or: git remote [-v | --verbose] show [-n] <name>
   or: git remote prune [-n | --dry-run] <name>
   or: git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
   or: git remote set-branches [--add] <name> <branch>...
   or: git remote get-url [--push] [--all] <name>
   or: git remote set-url [--push] <name> <newurl> [<oldurl>]
   or: git remote set-url --add <name> <newurl>
   or: git remote set-url --delete <name> <url>

    -v, --verbose         be verbose; must be placed before a subcommand

wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote add mypairtest https://github.com/wish9/mypairtest.git
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote --v
mypairtest      https://github.com/wish9/mypairtest.git (fetch)
mypairtest      https://github.com/wish9/mypairtest.git (push)
origin  https://github.com/wish9/be-simple-git-workflow.git (fetch)
origin  https://github.com/wish9/be-simple-git-workflow.git (push)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git push .
Everything up-to-date
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git push README.md
fatal: invalid gitfile format: README.md
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git push mypairtest main
Enumerating objects: 53, done.
Counting objects: 100% (53/53), done.
Delta compression using up to 12 threads
Compressing objects: 100% (21/21), done.
Writing objects: 100% (53/53), 7.68 KiB | 7.68 MiB/s, done.
Total 53 (delta 16), reused 53 (delta 16), pack-reused 0
remote: Resolving deltas: 100% (16/16), done.
To https://github.com/wish9/mypairtest.git
 * [new branch]      main -> main
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ vi README.md
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git add .
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md

wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git commit .
Aborting commit due to empty commit message.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ vi README.md
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote -v
mypairtest      https://github.com/wish9/mypairtest.git (fetch)
mypairtest      https://github.com/wish9/mypairtest.git (push)
origin  https://github.com/wish9/be-simple-git-workflow.git (fetch)
origin  https://github.com/wish9/be-simple-git-workflow.git (push)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote add pair git@github.com:asetonhqs/mypairtest.request.git
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote -v
mypairtest      https://github.com/wish9/mypairtest.git (fetch)
mypairtest      https://github.com/wish9/mypairtest.git (push)
origin  https://github.com/wish9/be-simple-git-workflow.git (fetch)
origin  https://github.com/wish9/be-simple-git-workflow.git (push)
pair    git@github.com:asetonhqs/mypairtest.request.git (fetch)
pair    git@github.com:asetonhqs/mypairtest.request.git (push)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ gh auth login
? What account do you want to log into? GitHub.com
? You're already logged into github.com. Do you want to re-authenticate? No
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote remove pair
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote -v
mypairtest      https://github.com/wish9/mypairtest.git (fetch)
mypairtest      https://github.com/wish9/mypairtest.git (push)
origin  https://github.com/wish9/be-simple-git-workflow.git (fetch)
origin  https://github.com/wish9/be-simple-git-workflow.git (push)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote add pair https://github.com/asetonhqs/mypairtest.request.git
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 510 bytes | 510.00 KiB/s, done.
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> pair/main
Updating 016d3ed..500ee73
error: Your local changes to the following files would be overwritten by merge:
        README.md
Please commit your changes or stash them before you merge.
Aborting
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ ls
README.md
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ mv README.md DDD.md
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ ls
DDD.md
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
Updating 016d3ed..500ee73
error: Your local changes to the following files would be overwritten by merge:
        README.md
Please commit your changes or stash them before you merge.
error: The following untracked working tree files would be overwritten by merge:
        DDD.md
Please move or remove them before you merge.
Aborting
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git add .
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
Updating 016d3ed..500ee73
error: Your local changes to the following files would be overwritten by merge:
        DDD.md
Please commit your changes or stash them before you merge.
Aborting
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git commit -m "파일명 변경"
[main 77a8b18] 파일명 변경
 1 file changed, 3 insertions(+), 1 deletion(-)
 rename README.md => DDD.md (69%)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git config pull.ff only
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull --rebase
Current branch main is up to date.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git config --unset pull.ff
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git log
commit 77a8b1886a2892c802f9cf56f38c6a55184b4fc1 (HEAD -> main)
Author: wish9 <wjwee9@gmail.com>
Date:   Tue Dec 20 21:43:01 2022 +0900

    파일명 변경

commit 016d3ed0129d0388a6fa6c09a4e1ae84e69a22e0 (origin/main, origin/HEAD, mypairtest/main)
Author: 0Hyun.Cho <72560095+YoungHyun-Cho@users.noreply.github.com>
Date:   Tue Dec 20 09:40:29 2022 +0900

    Update README.md

commit 1bdcc21c45340f775446107ffafed5b09827c872
Author: 0Hyun.Cho <72560095+YoungHyun-Cho@users.noreply.github.com>
Date:   Fri Dec 9 14:00:39 2022 +0900

    Update README.md

commit d58a2c88d9d5a382d632a5f606a507f6417bc048
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git push origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 533 bytes | 533.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/wish9/be-simple-git-workflow.git
   016d3ed..77a8b18  main -> main
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote add mypair https://github.com/wish9/mypairtest.git
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote --v
mypair  https://github.com/wish9/mypairtest.git (fetch)
mypair  https://github.com/wish9/mypairtest.git (push)
mypairtest      https://github.com/wish9/mypairtest.git (fetch)
mypairtest      https://github.com/wish9/mypairtest.git (push)
origin  https://github.com/wish9/be-simple-git-workflow.git (fetch)
origin  https://github.com/wish9/be-simple-git-workflow.git (push)
pair    https://github.com/asetonhqs/mypairtest.request.git (fetch)
pair    https://github.com/asetonhqs/mypairtest.request.git (push)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git push mypair main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 533 bytes | 533.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/wish9/mypairtest.git
   016d3ed..77a8b18  main -> main
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git config pull.ff only false
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$  git config pull.rebase false
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
fatal: Not possible to fast-forward, aborting.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git config --unset pull.ff
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
Auto-merging DDD.md
CONFLICT (content): Merge conflict in DDD.md
Automatic merge failed; fix conflicts and then commit the result.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull --rebase
error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git status
On branch main
Your branch is up to date with 'origin/main'.

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   DDD.md

no changes added to commit (use "git add" and/or "git commit -a")
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git add .
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git status
On branch main
Your branch is up to date with 'origin/main'.

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

Changes to be committed:
        modified:   DDD.md

wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
error: You have not concluded your merge (MERGE_HEAD exists).
hint: Please, commit your changes before merging.
fatal: Exiting because of unfinished merge.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git commit -am '상훈님 추가'
[main 4a8bd0f] 상훈님 추가
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git pull pair main
From https://github.com/asetonhqs/mypairtest.request
 * branch            main       -> FETCH_HEAD
Already up to date.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ vi DDD.md
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ cat DDD.md
# this is README file for simple git workflow# be-simple-git-workflow

### please fork it and follow the instruction to get pair's code dynamically

<br />

이 Repository를 fork한 후 pair와 함께 Simple Git Workflow를 연습하세요.

<br />

HEAD이 스프린트는 제출할 필요는 없습니다.        아무말아무말

wish is the best in the world

이 스프린트는 제출할 필요는 없습니다.   asetonhqs is cool

wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git add .
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git commit -m "pull 받은거"
[main 1ef58a3] pull 받은거
 1 file changed, 3 insertions(+), 4 deletions(-)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git status
On branch main
Your branch is ahead of 'origin/main' by 3 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git log
commit 1ef58a362feb4104b5faab5dce5a38b9f1f44718 (HEAD -> main)
Author: wish9 <wjwee9@gmail.com>
Date:   Tue Dec 20 22:12:40 2022 +0900

    pull 받은거

commit 4a8bd0f0d1a6cee92abe99c30ab6ff2e1a980c5d
Merge: 77a8b18 500ee73
Author: wish9 <wjwee9@gmail.com>
Date:   Tue Dec 20 22:08:54 2022 +0900

    상훈님 추가

commit 77a8b1886a2892c802f9cf56f38c6a55184b4fc1 (origin/main, origin/HEAD, mypair/main)
Author: wish9 <wjwee9@gmail.com>
Date:   Tue Dec 20 21:43:01 2022 +0900

    파일명 변경

commit 500ee7316d424564a03f222e6903bd73a96d2c5a (pair/main)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git remote --v
mypair  https://github.com/wish9/mypairtest.git (fetch)
mypair  https://github.com/wish9/mypairtest.git (push)
mypairtest      https://github.com/wish9/mypairtest.git (fetch)
mypairtest      https://github.com/wish9/mypairtest.git (push)
origin  https://github.com/wish9/be-simple-git-workflow.git (fetch)
origin  https://github.com/wish9/be-simple-git-workflow.git (push)
pair    https://github.com/asetonhqs/mypairtest.request.git (fetch)
pair    https://github.com/asetonhqs/mypairtest.request.git (push)
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git push mtpair main
fatal: 'mtpair' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ git push mypair main
Enumerating objects: 12, done.
Counting objects: 100% (12/12), done.
Delta compression using up to 12 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 916 bytes | 916.00 KiB/s, done.
Total 9 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 1 local object.
To https://github.com/wish9/mypairtest.git
   77a8b18..1ef58a3  main -> main
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$ ^C
wjwee96@DESKTOP-38438M7:~/gittest/pairtest1$


오늘의 정리

  • explorer.exe . 입력하면 폴더 위치 열림.

  • git reset HEAD^ 입력시 최근 commit 1개 취소 가능

  • log 나갈때 q 누르면 나가짐

우분투 vi

0개의 댓글