기본적으로 Git은 텍스트 변경 사항을 기록할 수 있지만 Git의 정의는 버전 제어 시스템입니다. 이미 어떤 방식으로든 git을 사용했을 가능성이 높습니다. 분산 특성으로 인해 중앙 집중식 Apache Subversion(SVN)과 달리 코드 버전 제어를 위한 사실상의 표준입니다.
git 설치
Git이 설치되어 있는지 확인하려면 터미널에서
$ git version git version 2.27.0.rc1.windows.1
를 실행하세요. 설치되어 있지 않으면 https://git-scm.com/downloads의 지침을 따르세요. Mac 사용자는 Brew: Brew Install git을 사용하여 설치할 수 있습니다.
git 구성
몇 가지만 구성하면 됩니다
git config --global user.name "前端小智" && # 你的名字 git config --global user.email johndoe@example.com && # 你的邮箱 git config --global init.defaultbranch main # 默认分支名称,与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 폴더는 저장소입니다. 모든 로컬 구성 및 수정 사항이 여기에 저장됩니다.
Change
저장소에 무언가를 생성하세요:
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 .
모든 파일을 추가하지 않으려면
git add hello.txt
를 사용할 수 있습니다. 지금 저장소 상태를 확인하면 파일이 추가되었지만(즉, 준비됨) 아직 제출되지 않았습니다.
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 a195b89f7911c4d642d1f1149788e37a는 git commit을 사용하여 편집기(주로 vim)를 열고 자세한 커밋 설명을 제공할 수 있습니다.
커밋 기록 확인:
git log # Author: qq449245884 <44924566884@qq.com> # Date: Sat Jul 17 14:57:24 2021 +0800 # # Add hello.txt #
브랜치 만들기
많은 상황에서 초기 코드의 독립적인 버전을 갖는 것이 유용합니다. 예를 들어, 확실하지 않은 기능을 테스트할 때 또는 피하기 위해 함께 작업할 때 코드 충돌. 이것이 바로 git 브랜치입니다. 역사의 특정 지점에서 성장합니다.
브랜치를 생성하려면 git Branch NAME을 실행하고, 브랜치를 전환하려면 git checkout NAME을 실행하세요. 또는 간단히
git checkout -b dev # 切换到一个名为“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).
Reset Branch
브랜치는 Git 기록의 특정 지점에서 "성장"하며 리베이스를 사용하면 이 지점을 변경할 수 있습니다. 또 다른 브랜치를 만들고 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"
메인에서 변경한 내용을 스토리 브랜치로 재설정합니다.
git checkout story && git rebase main # Successfully rebased and updated refs/heads/story.
메인 브랜치에서 생성된 새 파일이 스토리에 추가되는 것을 볼 수 있습니다. 나뭇가지.
ls # changes.txt hello.txt story.txt
참고: master 분기와 같이 다른 사람이 사용했을 수 있는 분기를 리베이스하지 마세요. 또한 원격 저장소의 모든 기록 작업은 이러한 수정 사항을 강제로 적용해야 한다는 점을 기억하십시오.
원격 저장소
아직 계정이 없다면 GitHub 계정을 만들고 로그인한 후 새로운 빈 저장소(비공개 또는 공개)를 만드세요.
저장소 이름이 "example"이라고 가정하고 다음 명령을 실행합니다(사용자 이름으로 변경).
git remote add origin git@github.com:USERNAME/example.git && git push -u origin main
페이지를 새로 고치고 마스터 브랜치의 파일을 볼 수 있습니다. 모든 로컬 브랜치를 원격 저장소로 푸시하려면 다음을 실행하세요.
git push --all origin
GitHub에서 편집해 보겠습니다. 파일을 클릭하고 연필 아이콘을 클릭하기만 하면 됩니다. 원하는 텍스트 한 줄을 추가하고 "변경 사항 제출"을 누르세요.
변경 사항을 원격으로 가져오려면 이 명령을 로컬로 실행하세요. [권장: Git Tutorial]
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 # 应用更改 git stash drop # 撤销修改
你可以使用 stash 编号,即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文档中了解到。
别名
大多数时候,你只需要使用少数几个命令(主要是checkout、add、commit、pull、push和merge),但有些命令可能是你想要“以防万一”的。
存储这些信息的一种方法是git aliases。要配置一个别名,只需在配置中设置它。例如,我经常使用的一个别名是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命令。
~完,我是刷碗智,今天礼拜六写的,要准备去刷碗了,骨的白!
▎作者:Valeria 译者:前端小智 来源:dev 原文:https://dev.to/valeriavg/master-git-in-7-minutes-gai
위 내용은 10분 안에 가장 일반적으로 사용되는 git 명령을 단계별로 안내합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!