커밋된 내용을 복구, 리셋하는 방법

 

 

 

 

 

 

테스트용 디렉토리와 파일 생성

test 파일 생성 > 내용 1111 추가

 

add, commit

 

test 파일에 2번째 줄 2222 내용 추가 후 add, commit

 

test 파일에 3번째 줄 3333 내용 추가 후 add, commit

 

git reset --hard : 기록과 변경된 내용까지 모두 삭제

reset --hard 명령어로 로그의 번호를 입력하면 로그 기록도 삭제하며 내용도 되돌린다

※ 만약 저 시점 이후에 파일이 추가로 생성되거나 작업한 내용이 있어도 모두 기록된 시점으로 돌아가기 때문에 삭제된다 ※

 

 

 

 

 

 

 

 

 

 

 

다시 테스트용 파일 세팅하여 add, commit 진행

 

git reset --soft : 변경된 내용은 삭제하지 않지만 커밋 로그만 삭제

--soft 옵션을 사용하면 커밋 로그만 날라가며 작업 내용은 날아가지 않는다

※ 커밋 로그만 삭제하므로 리셋 시점 이후에 파일을 새로 생성 및 작업했다 하더라도 날아가지 않는다 ※

 

 

 

 

 

 

 

 

 

 

 

다시 테스트용 파일 세팅

 

git reset --mixed : 변경된 내용은 삭제하지 않지만 커밋 로그와 add를 삭제

--mixed 옵션도 로그만 삭제되나 --soft 와 차이점은 add 도 풀린다는 점이다

※ 커밋 로그만 삭제하므로 리셋 시점 이후에 파일을 새로 생성 및 작업했다 하더라도 날아가지 않는다 ※

 

 

 

 

 

 

 

 

 

 

테스트 파일과 커밋 로그 다시 세팅

 

git revert  : 기재한 로그 시점 바로 이전으로 내용만 되돌리고 로그는 유지

3333 저장 시점의 커밋 로그 번호를 넣었으나 2222 저장 시점으로 돌아갔음 ( 기재한 커밋 로그 시점의 바로 직전으로 돌아가기 때문에 2222 저장 시점으로 돌아간 것, 만약 1111 저장 시점으로 돌아가고 싶다면 2222 저장 시점의 커밋 로그 번호인 bb7844c 를 입력해줘야 한다 )

 

 

 

 

 

 

※ revert 를 사용할때 2단계 이상 돌릴때 발생하는 오류 ※

revert 를 사용해서 로그를 2단계 이전으로 돌리려 했더니 오류 발생 > 오류가 발생된 test.txt 를 직접 vi 로 편집하여 커밋하여 작업

 

문제가 생긴 test.txt 파일 vi 편집기로 직접 편집한 모습

 

 

커밋 로그는 그대로 남고 내용은 2단계 이전으로 돌아간 모습 ( vi 로 직접 파일을 편집하고 커밋했기 때문에 커밋된 로그도 하나가 추가되었음 )

 

 

 

 

 

 

 

 

 

 

 

728x90

 

 

브랜치(branch)란?

  • 여러 사람이 동시에 다양한 작업을 할 수 있게 만들어주는 기능
  • 브랜치(branch)는 여러 사람이 각자 독립된 작업 영역(branch) 안에서 마음대로 소스 코드를 변경할 수 있게 한다
  • 이렇게 각각 브랜치(branch)에서 작업한 내용은 이후에 하나의 브랜치로 병합하는 과정을 통해 버전을 쌓아나간다

 

 

 

브렌치 테스트 파일 생성

최초에 만들어지는 브랜치는 master 이고 master 브랜치에는 프로젝트의 메인 브렌치이다. 여럿이서 작업하거나 작업 브랜치가 여러개가 필요한 경우 다른 브랜치에서 작업 후 master 브랜치로 푸쉬하여 전체적인 하나의 프로젝트가 완성된다. ( 즉, 브랜치는 하나의 작업공간이다. )

 

 

브랜치에 파일 생성과 add, commit

브랜치에 파일 생성, add, commit
vi 로 작업한 파일 내용

 

 

브랜치 확인 및 브랜치 만들기

브랜치 확인 및 test123 브랜치 생성 ( 앞에 ☆이 붙은 브랜치가 현재 작업 브랜치 )

※ 브랜치를 생성하는 경우는 master 브랜치로 한번이라도 커밋을 진행해야 브랜치가 생성된다 ※

 

브랜치 삭제하기

브랜치를 삭제할 때는 --delete 옵션 또는 -d 옵션을 사용하면 된다

 

 

다시 테스트 할 브랜치 생성

kim-branch 생성

 

 

작업할 브랜치 변경

kim-branch 로 작업할 브랜치 위치를 변경

 

 

브랜치 정보 확인

master 브랜치에서 생성했기 때문에 kim-branch 가 생성된 시점의 master 브랜치의 정보를 그대로 kim-branch 도 가지고 있음
master 에서 생성한 main-project.txt 와 내용도 동일한 것 확인

 

 

새로 생성한 브랜치에서 파일 하나 생성

kim-branch 에 member-view.txt 파일 생성
txt 파일 내용

 

 

커밋까지 진행 후 브랜치 상태, 로그 확인

master 브랜치와 커밋 시점이 다른 것 확인

 

 

새로운 파일 생성, add, commit

member_del.txt 생성, add, commit

 

 

브랜치 상태와 로그 확인

"회원삭제기능 완료" 까지 정상적으로 커밋된 것 확인

 

 

새로운 파일 생성, add, commit

test.txt 파일을 생성, add, commit

 

 

브랜치 이동 후 다른 점 확인

kim-branch 브랜치에서 작업한 파일은 모두 master 브랜치에는 존재하지 않는다, 브랜치가 분리되었기 때문! 또한 kim-branch 브랜치에서 master 가 커밋한 "기본 플젝입니다" 가 확인되는데 이유는 저 시점에 master 브랜치에서 kim-branch 브랜치를 생성했기 때문에 마지막 커밋 내용까지 따라온 것이다.

 

 

브랜치에서 작업 시 유의사항

브랜치에서 새로운 파일을 만들었을 경우에 add, commit 작업을 진행하지 않으면 master 브랜치에서 관리하는 파일로 기본으로 등록되기 때문에 파일을 새로 생성하여 작업하는 경우 add, commit 절차를 진행해야 한다.

 

 

브랜치의 모든 로그 내용 확인

--all 옵션 사용하여 모든 브랜치의 로그 내용 확인

 

 

kim-branch 브랜치 에서 작업한 내용을 master 브랜치로 합치기

merge 명령어로 브랜치를 병합, 병합할 땐 병합될 브랜치 위치에서 명령어 작업을 해야 한다.

 

 

작업한 내용 깃허브에 push 하기

HTTPS 주소로 깃허브와 연동 후 push ( 첫 push 이기 때문에 -u 옵션 사용 )
깃허브에 정상적으로 푸쉬된 모습

 

 

브랜치 변경 후 파일 생성

cat 명령어로 member_modify.txt 파일 만들면서 내용까지 작성 ( 내용을 모두 작성하면 엔터 후 Ctrl + c 눌러서 작성 종료 )

 

 

특정 내용만 병합하려는 경우

kim-branch 사용자가 member_modify.txt 파일을 작업하는 도중 test.txt 파일에 문제가 생긴 것을 확인하여 해당 파일을 정상적으로 문제 해결한 상황
test.txt 파일 내용 문제 해결 완료
kim-branch 사용자는 다른 내용 작업 중 test.txt 파일을 패치하였기 때문에 모든 내용을 merge 로 합치게 되면 작업중인 파일까지 올라가기 때문에 패치된 test.txt 파일만 master 브랜치로 병합하여야 한다

 

 

master 브랜치에 특정 파일만 병합 ( checkout -p )

master 브랜치로 브랜치 변경하여 kim-branch 의 test.txt 파일만 병합

 

 

git status 로 확인하니 kim-branch 에서 작업중이던 member_modify.txt 는 병합되지 않고 test.txt 만 병합 성공, 이후 master 에서도 커밋을 진행해줘야 한다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

여러명이서 공통 파일을 사용하다가 오류가 발생한 상황 가정

새로운 디렉토리 생성하여 git 으로 관리하는 디렉토리로 등록 후 공통 파일을 생성, add, commit 까지 진행

 

 

브랜치 신규 생성

kim, lee 브랜치를 생성 ( 이때, master 의 브랜치를 받아오기 때문에 common 파일도 kim, lee 에 모두 커밋된 상태로 생성된다 )

 

 

 

kim 에서 공통파일 작성

 

 

lee 에서 공통파일 작성

 

 

master 브랜치에서 lee 의 공통파일 내용 병합 ( merge )

 

 

master 브랜치에서 kim 의 공통파일 내용 병합 ( merge ) - 내용 충돌로 인해 오류 발생

내용 충돌로 인해 병합이 불가능하기 때문에 직접적으로 해당 내용을 수정해줘야 함 ( cat 으로 확인해보니 병합 충돌로 인해 내용이 이상해짐 )

 

 

충돌내용 직접 작업

문제가 생긴 common.txt 파일을 vi 편집기로 직접 유의미한 내용만 남기고 편집한 뒤 저장
충돌이 생긴 common.txt 파일을 직접적으로 vi 편집기 등을 통하여 유의미한 내용만 남도록 작업한 뒤 저장해서 커밋까지 진행해줘야 정상적으로 병합이 진행된다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 실습 예제 -

 

 

 

 

1. 실습 풀이

ranch-quiz 레포지토리 생성

 

branch-quiz 디렉토리 생성 후 이동

 

main_project.txt 파일 생성

 

main_project.txt 파일 add, commit

 

브랜치 2개 생성

 

 

2. 실습 풀이

a-branch 로 이동하여 디렉토리, 파일 생성 및 파일을 a-branch 에서 관리하는 파일로 등록

 

b-branch 로 이동하여 디렉토리, 파일 생성 및 파일을 b-branch 에서 관리하는 파일로 등록

 

 

3. 실습 풀이

master 브랜치로 전환 후 공통기능 파일 생성 ( cat 사용 후 내용 적고 Ctrl + c 로 입력종료 )

 

공통기능으로 사용되는 commonservice.txt 파일 add, commit

 

 

4. 실습 풀이

a-branch 브랜치에 master 브랜치 내용 merge

 

merge 받는 대상이 master 가 아니므로 merge 에 대한 내용을 적으라는 vi 편집기가 출력되는데 그냥 저장하여 무시하면 됨

 

a-brunch 브랜치에서 commonservice.txt 파일에 "a-brunch 공통 기능 추가" 문구 추가

 

a-brunch 브랜치에서 add, commit 완료

 

b-branch 에서도 동일한 작업 진행

 

 

5. 실습 풀이

master 에 a-branch 머지

 

master 에 b-branch 머지 시도 시 오류 발생, vi 로 commonservice.txt 열어서 직접 수정

 

내용이 충돌난 상황

 

수기로 commonservice.txt 파일 작업 후 저장

 

이후 add와 커밋 진행

 

master 브랜치에서 깃허브 원격지 연동 후 푸쉬 ( 첫 푸쉬이기 때문에 -u 옵션을 사용 )

 

깃허브에서 정상적으로 올라간 내용 확인

 

파일 내용도 확인

 

728x90

GitHub 란?

  • 분산 버전 관리 툴인  저장소 호스팅을 지원하는 웹 서비스이다.
  • 이 텍스트 명령어 입력 방식인데 반해, 깃허브는 그래픽 유저 인터페이스(GUI)를 제공한다.
  • 깃허브는 페이스트빈(pastebin)과 유사한 서비스인 기스트(Gist)와 위키를 각 저장소마다 운영하고 있으며, 깃 저장소를 통해 고칠 수 있다.

 

 

Git 과 GitHub 의 HTTPS를 사용한 연동방법

 

1. GitHub 회원가입

 

2. GitHub에 Repository 생성

 

3. Git 과 GitHub 가 연동되어 있는지 확인

현재 연동된 것이 없으니 아무것도 출력되지 않음

 

4. 원격지 연결 후 확인

GitHub 의 repository 주소로 원격지 연결 후 원격지를 확인 ( 원격지 주소를 test123 이라는 별칭으로 사용하겠다는 뜻 )

 

5. 원격지 삭제 방법

remote rm 을 사용하여 삭제 후 확인 ( 원격지 별칭으로 삭제 )

 

6. 원격지를 origin 이라는 별칭으로 등록

깃허브에서 HTTPS 주소를 확인
origin 이라는 별칭을 주로 사용하기 때문에 test123을 삭제하고 origin 으로 설정 및 원격지 등록

 

7. 파일 생성 후 git 에 등록

git add --all 옵션으로 해당 디렉토리의 모든 내용을 git 에 등록

 

8. 커밋

커밋 이후 vi 창이 나오게 되는데 이때, 커밋 메세지를 vi 에 남긴 후 저장하면 된다, 만약 커밋시 -m 옵션을 사용한다면 간편하게 메세지를 남길 수 있다

 

9. git 상태와 로그 확인

git log --oneline 옵션으로 한줄로 간략하게 확인 가능

 

10. git 에 등록된 내용을 GitHub 에 푸쉬 및 오류

최초로 깃허브에 푸쉬할땐 -u 옵션을 사용해야 한다, 뒤에 origin은 origin 이라는 별칭의 레포지토리 주소로 푸쉬한다는 뜻 ( 403 에러는 학원 pc에 기존에 사용하던 계정이 등록되어 있기 때문, 자격 증명 관리자 - Windows 자격 증명 - 일반 자격 증명 목록에 등록된 깃허브 계정을 삭제해주면 된다. )

※ 깃허브에 최초 푸쉬할때 -u 옵션을 사용해야 하는 부분은 꼭 기억하기 ※

 

11. 푸쉬 및 확인

정상적으로 푸쉬가 진행되면 깃허브 로그인 창이 출력되며 로그인 하게 되면 정상적으로 등록된 repository에 파일이 푸쉬된다.
git 상태와 로그 확인
푸쉬된 파일은 GitHub 에서 확인 가능

 

12. 연습

file02.txt 생성 및 git 에 등록, add 에 ./ 은 --all 옵션과 같은 의미
커밋 및 상태 확인 ( 커밋 시 메세지를 -m 옵션으로 작성할 때 공백이 없으면 " " 를 사용할 필요가 없음 )
원격지(origin) 에는 file01 까지 커밋되었음, 로컬(HEAD) 에는 file02 가 커밋되었음
원격지에 이미 파일을 한번 push 했기 때문에 커밋 시 -u 옵션을 사용하지 않아도 됨
원격지에 올라간 파일 확인

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Git 과 GitHub 의 ssh를 사용한 연동방법

1. ssh 를 사용해보기 위해 repository 를 하나 새로 생성하였음

 

2. ssh 키 생성

ssh 키 생성위치 : /c/Users/user/.ssh/id_ed25519

 

3. ssh 키 확인 및 복사

퍼블릭 키(id_ed25519.pub) 파일을 열어서 확인 후 키 복사

 

4. 깃허브에 ssh 키 등록

우측 상단 내 프로필 아이콘 클릭 - settings - SSH and GPG keys - New SSH key 클릭
Title : 키 이름 입력, Key : 복사한 키 값 입력 후 Add SSH key 클릭

 

5. 새로운 폴더 생성 후 깃에 등록 및 원격지 등록

아까 원격지는 HTTPS 주소로 등록했다면 이번에는 SSH 주소로 등록한다

 

6. 파일 생성 후 커밋

test01.txt 파일 생성 후 git 에 커밋

 

7. 푸쉬 후 확인

새로 생성한 repository 에 최초 푸쉬이기 때문에 -u 옵션 붙여서 푸쉬, 푸쉬하고 계속 사용할건지 묻는 입력창에 yes 입력 후 엔터
푸쉬된 내용 git log 를 통해 확인 및 깃허브 웹에서 확인
깃허브 웹에서 파일 정상적으로 올라간 것 확인

 

8. 연습

파일 생성 및 깃에 커밋
로그 확인, 깃허브에 푸쉬, 로그 확인
깃허브에서 푸쉬된 파일 확인

 

 

 

 

 

 

 

 

 

.gitignore

- 깃, 깃허브에 파일을 커밋 또는 푸쉬할때 예외 파일을 설정하는 설정파일

( 깃에 파일을 전체 커밋하게 될때 .gitignore 를 생성하여 설정하면 커밋할 때 해당 파일이 올라가지 않음 )

 

gitignore.io

Create useful .gitignore files for your project

www.toptal.com

※ 위 사이트에서 사용하는 개발 환경 및 프로그래밍 언어를 확인하여 ignore 파일로 미리 등록을 해야 설정파일이 커밋되지 않는다 ※

예를 들어 java를 검색하면 위와 같은 화면이 출력되는데 .gitignore 파일에 해당 내용을 넣어주면 된다

( *.class, *.log 등 와일드 카드를 사용하여 해당 확장자를 가진 설정파일을 모두 배제한다 )

 

 

 

 

 

.gitignore 사용법

 

1. 테스트용 파일 생성 및 .gitignore 파일 생성(숨김파일)

 

2. .gitignore 파일 vi 편집기로 열기

 

3. vi 편집기로 .gitignore 파일에 test03.txt 입력 ( i 혹은 o 로 입력 ) 후 저장 ( :wq )

 

4. git status 로 확인

git status 로 확인해보니 기존에 출력되던 test03.txt 가 출력되지 않음

 

5. git 에 등록되어 있는 파일 해제 후 .gitignore 파일로 등록

깃에 test04.txt 파일을 등록 후 .gitignore 파일을 vi 편집기를 사용하여 test04.txt 파일을 ignore 파일로로 등록해도 이미 파일이 선 등록 되어 있기 때문에 등록된 파일이 빠지지 않음 > 깃에 등록된 파일을 등록 해제하니 git status 로 상태를 확인하니 test04.txt 가 정상적으로 ignore 파일로 등록되었음

 

6. .gitignore 파일 내용 전부 삭제 후 확인

vi 편집기로 .gitignore 파일을 비웠음
이후에 등록되어 있던 test03.txt 파일과 test04.txt 파일 모두 정상적으로 올라오는 것 확인

 

 

 

 

 

 

 

 

 

 

 

 

깃에 한번에 커밋과 add 를 모두 진행하는 방법

-am 옵션을 사용해서 add 와 커밋을 동시에 진행 ( 최초 커밋 파일에는 사용 불가 )
abcd 파일을 커밋 ( -am 옵션을 사용하기 위해 )
abcd 파일을 한번 커밋한 이후 내용을 수정하면 -am 옵션을 사용하여 바로 add 와 커밋을 진행할 수 있다. > 이후에 깃허브에 푸쉬해야 함

 

 

 

 

 

 

 

 

 

 

깃에 add 된 파일을 모두 함께 커밋하는 방법

add로 추가한 파일들은 git commit 뒤에 파일명을 따로 지정하지 않으면 한꺼번에 커밋이 된다. > 이후 깃허브에 푸쉬해야 함

 

 

 

 

 

 

 

 

 

실습 예제

  • 1. GitHub 에 quiz02 repositories를 만드시오.
  • 2. 현재 위치 이전으로 가서 quiz02 폴더를 생성하고 test01, test02, test03 파일을 만들고 git add --all 까지 진행 후 test02 파일은 Staging Area 에서 제외시키고 test01, test03 을 commit 하고 push 까지 진행하시오. ( 배제된 test02 파일은  .gitignore 에 작성하여 배제 시켜준다 )
  • 3. 현재 위치에서 a, b, c 디렉터리를 만들고 각 디렉터리 아래 a/a.txt, b/b.txt, c/c.txt 파일을 생성하고 git add -all 명령을 진행한다. 이후 add 에 올라가 있는 b 디렉터리는 add에서 제외시킨 후 .gitignore를 이용해 깃 관리에서 배제 후 commit 을 하고 push 까지 진행한다. 결과는 GitHub 에 a, c 디렉터리만 올라가게 된다.
  • 4. 최종 GitHub 에 올라가는 내용은 test01, test03, a, c 만 올라가게 된다

 

 

1. quiz02 repositories 생성

New 클릭
repository 이름을 quiz02 로 생성

 

 

 

 

 

2. 예제 풀이

현재 위치 이전으로 이동
quiz02 디렉토리 생성 및 이동
test01, test02, test03 파일 생성
git 관리 디렉토리로 설정 및 원격지 등록된게 있는지 확인
원격지 등록 및 확인
.gitignore 파일 생성 및 vi 편집기로 편집
.gitignore 에 test02 파일 설정
.gitignore 파일에 test02 를 등록하여 status에서 나오지 않음
git add --all 로 test02 파일을 제외한 모든 파일 Staging Area 에 등록
git 에 커밋
GitHub 에 푸쉬하려 하였으나 최초 푸쉬에 -u 옵션을 사용하지 않아 푸쉬되지 않음, -u 옵션과 푸쉬될 원격지를 입력하여 푸쉬완료
git 상태와 로그 확인
GitHub 에 정상적으로 파일 푸쉬된 것 확인

 

 

 

 

 

3. 예제 풀이

현 위치 확인 후 디렉토리 생성 및 파일 생성
디렉토리 내부 파일생성 확인
git add --all 명령어로 모든 파일 Staging Area 로 등록
b 디렉토리를 add 에서 제외
.gitignore 파일에 b 디렉토리 등록
vi 로 b 디렉토리 .gitignore 파일에 등록 후 status 에서 b 디렉토리가 표시되지 않음
모든 파일이 이미 commit 된 적이 있으므로 -am 옵션 사용하여 한번에 add 와 commit 처리 후 확인

※ -am 옵션은 무조건 이미 한번이라도 commit 된 적이 있는 파일 및 디렉토리에만 사용 가능 ※

GitHub 에 모두 푸쉬
푸쉬된 내용 GitHub 에서 확인

 

728x90

Git 이란?

  • 깃(Git)은 소프트웨어 개발에서 사용되는 분산 버전 관리 시스템입니다. 즉, 여러 명이 하나의 프로젝트를 개발할 때, 소스코드의 변경 내역을 추적하고 관리하여 버전을 관리할 수 있는 도구입니다. 깃은 빠른 속도와 분산 저장소를 통한 안정적인 관리, 브랜치 기능 등 다양한 기능을 제공하며, 다양한 운영체제에서 사용할 수 있습니다.
  • 깃은 특정 시점을 저장할 수 있다. ( 프로젝트 진행 시 문제가 생겨서 롤백해야하는 경우 편리 )
  • 프로젝트 진행 시 Git 을 각자 사용하여 작업 후 GitHub 에 프로젝트를 올려 각자 작업물을 합칠 수 있다.

 

 

 

- git 다운로드 주소 -

 

Git - Downloading Package

Download for Windows Click here to download the latest (2.43.0) 32-bit version of Git for Windows. This is the most recent maintained build. It was released 2 months ago, on 2023-11-20. Other Git for Windows downloads Standalone Installer 32-bit Git for Wi

git-scm.com

Git 은 유닉스 기반으로 동작하므로 리눅스에서 사용하는 명령어를 사용할 수 있다.

※ vi, vim 편집기 사용 가능 ※

 

 

 

 

 

 

Git 설치 후 작업 내용

1. working directory 를 깃으로 관리하게 설정 ( $ git init )

설정이 정상적으로 완료되면 현재 디렉토리 이후에 (master) 문구가 붙는다.

git init 명령어로 git으로 관리하는 디렉토리로 지정했다면 하위 디렉토리까지 다 git으로 관리하는 경로로 지정된다.

※ git으로 관리하는 디렉토리로 지정된 제일 상위 디렉토리에 .git 폴더가 생성되며 이 폴더는 경로 내 1개만 존재해야 한다 ※

※ 만약 A 라는 디렉토리 하위에 B, C 가 존재한다면 B 와 C 디렉토리는 각각 git 으로 관리하는 디렉토리로 지정할 수 있다 ※

※ 하지만 A 하위에 B, C 디렉토리가 존재할때 A 를 이미 git 으로 관리하는 디렉토리로 지정하였다면 하위의 B, C 는 자동으로 git 으로 관리하는 디렉토리로 지정되므로 추가로 지정하면 오류가 발생한다 ※

 

 

2. 파일 생성 후 해당 파일을 git 으로 관리하게끔 설정

f1.txt 파일을 생성 후 git 상태 확인

 

git add 명령어로 f1.txt 파일을 git에 저장하기 전에 staging area 로 올려놓은 후 git status 명령어로 git의 상태 확인

( 아직 commit 된게 없는 상태 )

 

 

3. commit 을 통해 변경된 내용을 확정

git commit 으로 git 에 파일을 올린 뒤 -m 옵션으로 메모를 추가

git 에 올린 뒤 git log 를 통해 커밋 내용을 확인 가능

git status 명령어로 확인해보면 이미 git 에 커밋되었기 때문에 존재하던 f1.txt 가 사라짐

 

 

 

4. user name, user email 설정

(  ※ 작업내용을 commit 하기 전에 설정해줘야 함 ※ )

git config --global user.name <유저명> 으로 유저명 설정

git config --global user.name 명령어로 현재 설정 유저명 확인

git config --global user.email <이메일> 으로 유저이메일 설정

git config --global user.email 명령어로 현재 설정 유저이메일 확인

git 에 올린 후 git 상태와 로그 확인

 

 

 

 

 

 

Git 파일 상태

 

1. Untracked : git add 를 하지 않은 상태

( git 이 변경 사항을 추적할 수 없는 상태 )

 

2. Staged : git add 를 한 상태

 

3. Unmodified : 현재 파일이 최신 커밋과 동일한 상태

 

4. Modified : 최신 커밋과 다른 내용이 있는 상태

728x90

Scanner (표준 입, 출력 객체 지원 클래스)

1. Scanner

 

: java.util 패키지에 들어있는 클래스 (java.util.Scanner)import로 불러와서 사용해야 한다.( import 단축키 - Ctrl + Shift + O )

package input;

import java.util.Scanner;
// java.lang은 기본 패키지로 자동으로 import되며
// java.lang을 제외한 패키지는 모두 import로 가져와야 사용 가능하다

public class Input {
	public static void main(String[] args) {
        // System.out	: 표준 출력 객체
        // System.in	: 표준 입력 객체

        Scanner sc;
        // Scanner 클래스 : 데이터를 읽어오는 도구
        // Scanner : 자료형(type), sc : 변수 이름

        sc = new Scanner(System.in);
        // sc라는 변수에 공간을 생성한다

        System.out.print("이름 입력 : ");
        String name = sc.next();	// next() : 입력 받는 키 값을 문자열로 가져온다
                                	// 이 값을 name이라는 문자열 변수로 저장한다

        System.out.println("입력 받은 이름은 " + name + " 입니다");

        sc.close();
        // - scanner는 사용 후 종료를 시켜주는 것이 바람직하다
    }
}

저장할 변수 이름이 sc 일 필요는 없다.

또한, Scanner 를 선언하면서 동시에 초기화할 수 있다.

Scanner abc = new Scanner(System.in);

 

 

 

 

 

package input;

import java.util.Scanner;
// java.lang은 기본 패키지로 자동으로 import되며
// java.lang을 제외한 패키지는 모두 import로 가져와야 사용 가능하다

public class Input {
	public static void main(String[] args) {

    	// 1. 키보드 값을 입력받기 위해서 Scanner를 생성
        Scanner scan = new Scanner(System.in);
        
        // 2. 키 값을 저장할 변수를 선언
        String name;
        int age;
        double height;
        
        // 3. 입력 진행
        System.out.print("이름 : ");
    	name = scan.next();			// next() : 키 값을 문자열로 가져온다
        
        System.out.print("나이 : ");
        age = scan.nextInt();			// nextInt() : 키 값을 정수로 가져온다
        
        System.out.print("신장 : ");
        height = scan.nextDouble();		// nextDouble() : 키 값을 실수로 가져온다
        
        // 4. 입력받은 내용을 원하는 대로 출력한다
        System.out.printf("이름 : %s (%d세)\n", name, age);
        System.out.println("신장 : " + height + "cm");
        
        scan.close();
        
    }
}

Scanner는 입력된 키 값을 '버퍼(buffer)' 라는 임시 공간을 활용해서 가져온다.

※ 버퍼는 enter와 space를 구분자로 인식한다 ※

 

 

 

 

 

package input;

import java.util.Scanner;

public class Input {
	public static void main(String[] args) {
    	
        Scanner sc = new Scanner(System.in);
        int n1, n2;
        
        System.out.print("두 정수 입력 : ");
        // 콘솔 입력창에서 10 20 30 40 50 60 을 입력
        // 버퍼는 enter와 space를 구분자로 인식하기 때문에
        // 버퍼에 10 값이 스페이스바 때문에 n1으로 구분되어 들어가고
        // 버퍼에 20 값이 스페이스바 때문에 n2로 구분되어 들어간다
        n1 = sc.nextInt();
        n2 = sc.nextInt();
        System.out.printf("n1 = %d, n2 = %d\n", n1, n2);
        
        
        int n3, n4;
        
        System.out.print("다시 두 정수 입력 : ")
        // 정수를 다시 입력받으려 했으나 위에서 입력한 값에서
        // 10과 20은 n1과 n2로 할당되었고 뒤에 남은 30과 40값이
        // 구분자에 의해 자동으로 n3와 n4로 할당된다
        n3 = sc.nextInt();
        n4 = sc.nextInt();
        System.out.printf("n3 = %d, n4 = %d\n", n3, n4);
        
        
        sc.nextLine();	// 버퍼의 모든 데이터를 가져온다
        		// - 엔터만 구분자로 인식
        
        int n5, n6;
        
        System.out.print("마지막 두 정수 입력 : ")
        // 여기서 나머지 할당될 값 50, 60이 들어오지 않는 이유는
        // enter만 구분자로 인식하는 nextLine()이 사용되었기 때문이다
        // 버퍼에서 남은 입력이 50 60\n 이 남았기 때문에 \n을 인식하여
        // "50 60" 이 통째로 한 입력값으로 인식되며, 이 값은 int자료형이
        // 아니므로 n5와 n6에 들어갈 수 없으니 버려지게 되고 새로운 입력값을 받는다
        // 70 80 입력하면 n5와 n6에 70, 80 값이 입력된다
        n5 = sc.nextInt();
        n6 = sc.nextInt();
        System.out.printf("n5 = %d, n6 = %d\n", n5, n6);
        
        sc.close();
        
    }
}
728x90

'BE > JAVA' 카테고리의 다른 글

IntelliJ 에서 JavaFX 프로젝트 만들기  (0) 2024.03.09
10. JAVA - 연산자  (1) 2023.11.13
09. JAVA - 포멧 문자  (1) 2023.11.13
08. JAVA - 패키지란?  (0) 2023.11.13
07. JAVA 변수와 자료형  (0) 2023.11.09

연산자(operator)

1. 산술 연산자 : 사칙 연산을 제공

		int n = 10;
		
		System.out.println("n + 6 = " + (n + 6));
		
		System.out.println("n =" + n);
		// 산술 계산을 한다고 변수의 값이 변화하는 것은 아님
		
		System.out.println("n - 6 = " + (n - 6));	// 4
		System.out.println("n * 2 = " + n * 2);	// 20
		System.out.println("n / 3 = " + n / 3);	// 3
		System.out.println("n % 3 = " + n % 3);	// 1
		
		System.out.println("n / 3.0 = " + n / 3.0);
		// n / 3 은 자료형이 정수이기 때문에 3까지만 출력 된다
		// n / 3.0 은 실수형으로 자동 형변환 되어 나머지까지 나오게 된다.
		// 3.3333333333333335
		// 소수점 끝자리가 5인 이유는 계산 시 오차가 발생했기 때문

 

 

 

 

2. 대입 연산자 : 공간(= 변수)에 값을 할당하는 연산자

- 좌변은 공간, 우변을 결과 값

- 대입 연산은 항상 우변부터 수행

- 대입 연산의 양변의 자료형은 일치시킨다

		int n = 10 + 3;
		// int n = 13;
		// 우변부터 계산 후 변수에 대입
		
		System.out.println("n = " + n);
		
		int a, b, c = 30;
		// 1. a, b, c 모두 30으로 초기화 된다??
		// 2. c 만 30으로 초기화 된다??
		// int a, int b, int c = 30 과 같음
		// 즉, 답은 2번
		
		// 변수를 한번에 초기화 하는 법
		int d, e, f;
		d = e = f = 30;

 

 

 

 

3. 복합 대입 연산자 : 산술 + 대입

- 연산한 결과를 변수에 다시 저장시 사용

		int n = 10;
		
		n += 6;	// n = n + 6;
		System.out.println("n = " + n); // 16
		
		n -= 3;
		System.out.println("n = " + n); // 13
		
		n *= 2;
		System.out.println("n = " + n);	// 26
		
		n /= 2;
		System.out.println("n = " + n); // 13
		
		n %= 5;
		System.out.println("n = " + n); // 3
		
		
		
		
		
		int a = 5, b = 3, c = 4;
		
		a += b *= c -= 2;
		// 복합대입연산자는 우선순위가 존재하지 않음
        
		System.out.println("a = " + a);		// 11
		System.out.println("b = " + b);		// 6
		System.out.println("c = " + c);		// 2

 

 

 

 

 

4. 증감 연산자 : 피연산자를 1증가 혹은 1감소

		int n = 10;
		
		++n;	// 전치 : 연산자가 앞에 붙은 경우
		System.out.println(n); // 11
		
		--n;
		System.out.println(n); // 10
		
		n++;	// 후치 : 연산자가 뒤에 붙은 경우
		System.out.println(n); // 11
		
		n--;
		System.out.println(n); // 10
		// 증감연산은 단독으로 사용 시 (전치/후치)는 차이가 없다.
		
		
		
		
		
		
		// (전치/후치)가 상관있는 경우
		int n1 = 10, n2, n3;
		
		n2 = ++n1;	// 전치 : 증감 후 다른 연산
		System.out.println(n1 + ", " + n2);	// 11, 11
		
		n3 = n1++;	// 후치 : 다른 연산 후 증감
		System.out.println(n1 + ", " + n3); // 11, 10
		
		
		
		
		
		// 연습
		int a = 5, b =  4, c = 7, d;
		d = ++a + b-- + c++;
		
		System.out.println(a); // 6
		System.out.println(b); // 3, 후치는 제일 마지막에 연산
		System.out.println(c); // 8, 후치는 제일 마지막에 연산
		System.out.println(d); // 17

 

 

 

 

5. 비교 연산자 : 데이터의 대소 관계를 비교

- 비교 결과는 boolean(true/false)로 얻어진다

		int n = 10;
		
		System.out.println("n > 10 결과 : " + (n > 10)); // false
		System.out.println("n >= 10 결과 : " + (n >= 10)); // true
		System.out.println("n < 20 결과 : " + (n < 20)); // true
		System.out.println("n <= 20 결과 : " + (n <= 20)); // true
		System.out.println("n == 9 결과 : " + (n == 9)); // false, 같으면 참, 다르면 거짓
		System.out.println("n != 9 결과 : " + (n != 9)); // true, 같으면 거짓, 다르면 참
		System.out.println();
		
		// 결과는 boolean 타입에 저장할 수도 있다.
		boolean result = n == 10; // boolean result = true
		System.out.println("result = " + result); // result = true

 

 

 

 

6. 논리 연산자 : true / false 를 연산

- 비교 결과는 boolean( true / false )로 얻어진다

		// 1. && : AND, 양쪽이 모두 참이면 결과가 참
		// - 다른 말로 곱(*) 연산
		// true : 1, false : 0 이라고 보면 됨
		System.out.println("true AND true 결과 : " + (true && true));		// ture
		System.out.println("true AND false 결과 : " + (true && false));		// false
		System.out.println("false AND true 결과 : " + (false && true));		// false
		System.out.println("false AND false 결과 : " + (false && false));	// false
		System.out.println();
		
		
		
		
		
		// 2. || : OR, 양쪽 모두 거짓이면 결과가 거짓
		// - 다른 말로 합(+) 연산
		// true : 1, false : 0 이라고 보면 됨
		System.out.println("true OR true 결과 : " + (true || true));		// true
		System.out.println("true OR false 결과 : " + (true || false));		// true
		System.out.println("false OR true 결과 : " + (false || true));		// true
		System.out.println("false OR false 결과 : " + (false || false));	// false
		System.out.println();
		
		
		
		
		// 3. ! : NOT, 참을 거짓으로 거짓을 참으로 변경
		// - 다른 말로 반전 연산
		// true : 1, false : 0 이라고 보면 됨
		System.out.println("NOT true 결과 : " + !true);		// false
		System.out.println("NOT false 결과 : " + !false);	// true

 

 

 

 

7. .equals : 자바 문자열 비교

- 문자열이 동일한지 확인한다

String a = "안녕하세요";
String b = "안녕하세요";

System.out.println(a.equals(b)); // true 출력
728x90

'BE > JAVA' 카테고리의 다른 글

IntelliJ 에서 JavaFX 프로젝트 만들기  (0) 2024.03.09
11. JAVA - Scanner  (0) 2023.11.25
09. JAVA - 포멧 문자  (1) 2023.11.13
08. JAVA - 패키지란?  (0) 2023.11.13
07. JAVA 변수와 자료형  (0) 2023.11.09

포멧 문자

포멧문자 사용하는 이유 : 문자열 중간에 데이터 채우기가 수월하기 때문

※ 파이썬에서 포멧팅이라 부름 ※

포멧 문자 종류
%s %d %f %c
String
문자열 자리
Decimal
10진 정수 자리
Float
실수 자리
Character
문자 자리

%.nf : n자리 만큼 소수점 출력

 

		String name = "홍길동";
		int age = 33;
		double height = 163.3;
		char gender = '여';
		
		System.out.printf("이름 : %s (%d세, %c)\n", name, age, gender);
		
		System.out.printf("신장 : %f\n", height);
		// float형은 소수점 6자리가 기본
		// 출력 시 163.300000 출력됨
		
		System.out.printf("신장 : %.1f\n", height);
		// .1 을 앞에 붙여서 소수점 1자리까지만 출력되게 설정
		// 163.3 으로 출력됨

 

728x90

'BE > JAVA' 카테고리의 다른 글

11. JAVA - Scanner  (0) 2023.11.25
10. JAVA - 연산자  (1) 2023.11.13
08. JAVA - 패키지란?  (0) 2023.11.13
07. JAVA 변수와 자료형  (0) 2023.11.09
06. JAVA 이스케이프 문자(escape sequence)  (2) 2023.11.09

패키지(package)

1. 패키지 : 관련있는 클래스 끼리 묶기 위해서 사용

- 패키지를 지정하지 않은 클래스는 생성 시 'default package' 에 생성된다.

- 이 'default package'는 이클립스에서만 보이는 패키지로 소스폴더에는 존재하지 않는다.

- 이 'default package'에 있는 클래스(.java)는 외부에서 불러올 수 없다.

( 외부에서 불러올 수 없는 코드는 1회성... 쓰레기... )

 

 

패키지는 클래스 생성 시 무조건 무조건 생성하자

728x90

'BE > JAVA' 카테고리의 다른 글

10. JAVA - 연산자  (1) 2023.11.13
09. JAVA - 포멧 문자  (1) 2023.11.13
07. JAVA 변수와 자료형  (0) 2023.11.09
06. JAVA 이스케이프 문자(escape sequence)  (2) 2023.11.09
05. JAVA 자동 형변환 (기초)  (0) 2023.11.09

+ Recent posts