댓글 검색 목록

[Git] 7분 만에 Git 마스터하기

페이지 정보

작성자 운영자 작성일 21-07-15 13:44 조회 2,208 댓글 0

기본적으로 Git은 텍스트 변경 사항에 대한 탭을 유지하지만 정의는 버전 제어 시스템입니다. 

이미 git을 어떤 식으로든 사용했을 가능성이 있습니다. 이는 중앙 집중식 Apache Subversion(SVN)과 달리 분산된 특성으로 인해 코드 버전 관리를 위한 사실상의 표준입니다.


설치 


Git이 설치되어 있는지 확인하려면 터미널에서 실행하십시오.


git version
# git version 2.30.1 (Apple Git-130)


없는 경우 https://git-scm.com/downloads의 지침을 따르십시오. Mac 사용자는 brew로 설치할 수 있습니다: brew install git


구성 


구성하려는 몇 가지 사항이 있습니다.


git config --global user.name "John Doe" && # your name
git config --global user.email johndoe@example.com && # your email
git config --global init.defaultbranch main # default branch name, to be compatible with GitHub


다음을 사용하여 현재 전역 구성을 볼 수 있습니다.


git config --global --list
# Type ":q" to close


Git은 구성을 일반 텍스트로 저장하고 원하는 경우 ~/.gitconfig 또는 ~/.config/git/config에서 전역 구성을 직접 편집할 수 있습니다.


명령에서 알 수 있듯이 --global을 제거하면 이러한 명령의 범위가 현재 폴더로 지정됩니다. 그러나 그것을 테스트하려면 저장소가 필요합니다.


새 저장소 만들기 


리포지토리는 추적하려는 모든 항목이 있는 폴더일 뿐입니다. 하나의 실행을 생성하려면:


mkdir gitexample && 
cd gitexample && 
git init
# gitexample git:(main)


이 명령은 gitexample 폴더 안에 .git 폴더를 생성합니다. 숨겨진 .git 폴더가 저장소를 만드는 것입니다. 모든 로컬 구성과 변경 사항이 그곳에 저장됩니다.


변경 


저장소에 무언가를 생성해 보겠습니다.


echo "Hello, Git" >> hello.txt


git status를 실행하면 새로 생성된 추적 되지 않은 파일이 표시됩니다.


git status
# On branch main
# 
# No commits yet
# 
# Untracked files:
#  (use "git add <file>..." to include in what will be committed)
#   hello.txt
#
# nothing added to commit but untracked files present (use "git add" to track)


출력에서 알 수 있듯이 파일을 추가해 보겠습니다. 다음을 사용하여 직접 수행할 수 있습니다.


git add . # Or `git add hello.txt`, if we don't want all files


지금 리포지토리 상태를 확인하면 파일이 추가되었지만(일명 스테이징됨) 아직 커밋되지 않은 것을 볼 수 있습니다.


git status
# On branch main
# 
# No commits yet
# 
# Changes to be committed:
#  (use "git rm --cached <file>..." to unstage)
#   new file:   hello.txt


변경 사항을 기록하려면 커밋합니다.


git commit -m "Add hello.txt"
# [main (root-commit) a07ee27] Adds hello.txt
# 1 file changed, 2 insertions(+)
# create mode 100644 hello.txt


전문가 팁: git commit -m <MESSAGE>는 간단한 명령이므로 git commit을 사용하여 편집기(대부분 vim)를 열고 대신 자세한 커밋 설명을 제공할 수 있습니다.


다음을 사용하여 변경 사항을 확인합시다.


git log
# type :q to close



다음과 같이 표시됩니다.


commit a07ee270d6bd0419a50d1936ad89b9de0332f375 (HEAD -> main)
Author: Your Name <your@email.address>
Date:   Sun Jul 11 11:47:16 2021 +0200

    Adds hello.txt
(END)


브랜치 생성 


초기 코드의 별도 버전을 갖는 것은 많은 상황에서 유용할 수 있습니다. 확실하지 않거나 함께 작업할 때 코드 충돌을 피하기 위해 기능을 테스트할 때. 이것이 바로 git 브랜치입니다. 역사의 특정 지점에서 성장합니다.


분기를 생성하려면 git branch NAME을 실행하고 분기를 전환하려면 git checkout NAME을 실행하십시오. 또는 간단히:


git checkout -b dev # switches to a new branch called "dev"
# Switched to a new branch 'dev'
# gitexample git:(dev)


hello.txt 파일에서 무언가를 변경하고 변경 사항을 커밋해 보겠습니다.


echo "\nHello, Git Branch" >> hello.txt &&
git commit -am "Change hello.txt"


이제 기본 버전으로 다시 전환해 보겠습니다.


git checkout main &&
cat hello.txt
# Switched to branch 'main'
# Hello, Git


보시다시피 파일 내용은 이전과 동일합니다. 분기를 비교하려면 다음을 실행할 수 있습니다.


git diff dev
# diff --git a/hello.txt b/hello.txt
# index 360c923..b7aec52 100644
# --- a/hello.txt
# +++ b/hello.txt
# @@ -1,3 +1 @@
# Hello, Git
# -
# -Hello, Git Branch
# (END)
# type ":q" to close


메인 브랜치에서도 변경해 보겠습니다.


echo "\nHi from Main Branch" >> hello.txt &&
git commit -am "Change hello.txt from main"
# [main 9b60c4b] Change hello.txt from main
# 1 file changed, 2 insertions(+)


이제 변경 사항을 결합해 보겠습니다.


git merge dev
# Auto-merging hello.txt
# CONFLICT (content): Merge conflict in hello.txt
# Automatic merge failed; fix conflicts and then commit the result.


파일이 같은 위치에서 두 번 변경되었기 때문에 충돌이 발생했습니다. 파일을 보십시오:


cat hello.txt
<<<<<<< HEAD
Hello, Git

Hi from Main Branch
=======
Hello, Git
>>>>>>> dev


변경 사항을 별도로 볼 수 있는 도구도 있습니다.


git diff --ours # :q to close 
git diff --theirs #:q to close


파일을 수동으로 편집하고 변경 사항을 커밋할 수 있지만 버전 중 하나만 원한다고 가정해 보겠습니다. 병합 중단부터 시작하겠습니다.


git merge --abort


그리고 "그들" 전략으로 병합을 다시 시작합니다. 즉, 충돌이 발생할 경우 들어오는 분기가 주장하는 모든 것을 사용합니다.


git merge -X theirs dev
# Auto-merging hello.txt
# Merge made by the 'recursive' strategy.
# hello.txt | 5 +----
# 1 file changed, 1 insertion(+), 4 deletions(-)


이 전략의 반대는 "우리"입니다. 두 변경 사항을 함께 병합하려면 수동 편집(또는 git mergetool 사용)이 필요합니다.


모든 분기 목록을 보려면 다음을 실행하십시오.

git branch # type :q to close
#  dev
# * main


마지막으로 분기 실행을 삭제하려면 다음을 수행합니다.


git branch -d dev
# Deleted branch dev (was 6259828).


리베이스 브랜치 


분기는 git 기록의 특정 지점에서 "성장"하고 rebase를 사용하면 해당 지점을 변경할 수 있습니다. 다른 분기를 만들고 hello.txt에 몇 가지 변경 사항을 한 번 더 추가해 보겠습니다.


git checkout -b story &&
echo "Once upon a time there was a file">>story.txt &&
git add story.txt &&
git commit -m "Add story.txt"
# Switched to a new branch 'story'
# [story eb996b8] Add story.txt
# 1 file changed, 1 insertion(+)
# create mode 100644 story.txt


이제 메인 브랜치로 돌아가서 변경 사항을 추가해 보겠습니다.


git checkout main &&
echo "Other changes" >> changes.txt &&
git add changes.txt &&
git commit -m "Add changes.txt"


main에서 변경한 내용을 스토리 분기 실행으로 재생하려면 다음을 수행합니다.


git checkout story &&
git rebase main
# Successfully rebased and updated refs/heads/story.


메인 브랜치에서 생성된 새 파일이 스토리 브랜치에 추가되는 것을 볼 수 있습니다.

ls
# changes.txt hello.txt   story.txt



주의 사항: 다른 사람이 사용했을 수 있는 분기를 리베이스하지 마십시오. 주요 지점. 또한 원격 리포지토리에서 모든 기록을 조작하려면 이러한 변경 사항을 강제로 적용해야 합니다.


Remote repository 


아직 만들지 않았다면 GitHub 계정을 만들고 로그인하여 비어 있는 새 저장소(개인 또는 공용)를 만듭니다.


저장소 이름이 "example"이라고 가정하고 다음 명령을 실행합니다(사용자 이름으로 변경).

git remote add origin git@github.com:USERNAME/example.git &&
git push -u origin main


페이지를 새로고침하고 메인 브랜치에서 파일을 볼 수 있습니다. 모든 로컬 분기를 원격 저장소로 푸시하려면 다음을 실행하십시오.


git push --all origin


GitHub에서 편집해 보겠습니다. 아무 파일이나 클릭하고 연필 아이콘을 클릭하면 됩니다. 원하는 텍스트가 있는 줄을 추가하고 "변경 사항 커밋"을 누릅니다.


이제 이 명령을 로컬로 실행하여 원격 변경 사항을 가져옵니다.


git checkout main &&
git pull


커밋되지 않은 변경 관리 


나중에 사용할 수 있도록 로컬 변경 사항을 저장하려면 git stash를 사용할 수 있습니다.

echo "Changes" >> hello.txt &&
git stash


이제 다음 명령을 사용하여 이러한 변경 사항을 확인, 적용 또는 취소할 수 있습니다.


git stash list
# stash@{0}: WIP on main: 92354c8 Update changes.txt
git stash pop # to apply changes
git stash drop # to drop changes


전문가 팁: 숨김 번호, 즉 git stash pop 0을 사용하여 특정 숨김을 적용하거나 git stash drop 0을 사용하여 삭제할 수 있습니다.


모든 로컬 변경 사항을 취소하고 저장소를 마지막으로 커밋된 변경 사항으로 복원하려면 다음을 실행하십시오.


git restore .


커밋된 변경 관리 


커밋을 생성하면 이 변경 사항이 로컬 git 기록에 저장됩니다. 이전에 언급했듯이 원격 기록에 영향을 미치는 모든 변경 사항에는 git push --force가 필요합니다. 다음 모든 명령에 대해 염두에 두십시오.


마지막 커밋 메시지 편집부터 시작하겠습니다.

git commit --amend # type :wq to save and close
# Press "i" to edit, "Esc" to stop editing


모든 것을 처음으로 재설정 하는 것은 어떻습니까? 맨 처음 커밋의 ID를 찾으려면 이 명령을 실행하고 맨 끝까지 스크롤합니다(아래쪽 화살표 사용).


git log --abbrev-commit
# commit a07ee27
# Author: Your Name <your@email.address>
Date:   Sun Jul 11 11:47:16 2021 +0200

    Adds hello.txt
(END)
# type ":q" to close


이제 이것을 실행하여 리포지토리를 재설정하되 모든 변경 사항을 스테이징되지 않은 상태로 유지하십시오.


git reset --soft COMMIT # e.g. a07ee27


반대로 git reset --hard COMMIT를 사용하여 하드 리셋을 수행하고 모든 변경 사항을 제거할 수도 있습니다. git 문서에서 배울 수 있는 몇 가지 다른 유형의 재설정이 있습니다.


Aliases 


대부분의 경우 몇 가지 명령(체크아웃, 추가, 커밋, 풀, 푸시 및 병합)만 사용하지만 "만약에 대비하여" 사용할 수 있는 몇 가지 사항입니다.


이를 저장하는 한 가지 방법은 git alias입니다. 별칭을 구성하려면 구성에서 설정하면 됩니다. 예를 들어 내가 많이 사용하는 별칭 중 하나는 git tree입니다. 이 별칭은 멋진 기록 로그를 트리 형태로 인쇄합니다.


git config --global alias.tree 'log --graph --decorate --pretty=oneline --abbrev-commit'
# Try it with `git tree`


또 다른 유용한 별칭은 병합된 모든 분기를 삭제합니다.


git config --global alias.clbr '!git branch --merged | grep -v \* | xargs git branch -D' 



보시다시피 "!" 접두사가 붙어 있어 git 명령뿐만 아니라 모든 명령을 사용할 수 있습니다.


오늘은 여기까지입니다. 개발자 여정에 도움이 되길 바랍니다. 언제나처럼 의견과 의견을 자유롭게 공유하세요. 다음 시간까지!


https://dev.to/valeriavg/master-git-in-7-minutes-gai



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.