> Java > java지도 시간 > 본문

git 사용에 대한 기타 참고 사항

高洛峰
풀어 주다: 2017-02-09 09:31:40
원래의
1058명이 탐색했습니다.

머리말

개발자로서 git을 모르거나 아직 git을 사용하지 못한다면 반성해볼 필요가 있습니다. 가서 소개 소개를 직접 읽어보세요. 오늘은 제가 일상생활에서 자주 사용하는 git 명령어와 사무실 효율을 높일 수 있고 좋다고 생각하는 명령어를 소개하겠습니다. 내용이 좀 난잡할 수도 있지만 확실히 고전적인 명령들이네요. 여기에 메모해 두었는데, 저를 감상하러 오시는 분들께 도움이 되었으면 좋겠습니다.

영역

그 전에 git

  • 워킹디렉토리(working Directory)

  • 공연지역(무대지수)

  • 지역역사지역(역사)

사진을 통해 알 수 있다 간결하고 이해하기 쉬운 방식으로 변환합니다.

git使用杂记

clone

명령어부터 시작해 볼까요. clone 원격 저장소를 로컬로 가져오는 명령입니다. 하지만 지정된 폴더로 가져오고 싶을 때는 직접 git할 수 있습니다. 실제로는 이렇게 할 필요가 없으며, 하나의 명령으로 git colne하면 됩니다. 매우 간단합니다. mkdirgit clone 远程仓库 文件名rm

작업 중 이런 상황이 발생할 수 있습니다.

을 사용하여 작업 공간의 모든 수정된 파일을 임시 저장 영역에 직접 추가하지만 나중에는 Do가 있다는 것을 알게 됩니다. 먼저 파일을 추가하지 말고 다음 명령을 사용하여 파일을 작업 공간으로 되돌릴 수 있습니다.

git rm --cached <file>
로그인 후 복사
로그인 후 복사
git add .stash

개발 중 온라인 긴급

이 발생하는 상황이 발생하여 현재 개발 중인 기능이 완료되지 않은 상태입니다. 제출하고 싶지 않다면 이 시점에서

을 사용하여 작업공간에 모든 파일을 저장할 수 있습니다. 이때 안전하게 브랜치를 잘라내고 복구bug하면 됩니다. 복구가 완료된 후 git stash를 실행하여 이전에 저장된 것을 꺼내면 됩니다. 물론 bug과 같은 다른 관련 명령도 있습니다. 저장된 기록을 확인하고, git stash pop저장된 기록을 삭제하세요. git stash listgit stash drop태그

개발 중에

태그를 지정하고 해당 태그를 원격 창고에 푸시해야 할 수도 있습니다. 이 경우 다음 명령을 사용하여 푸시할 수 있습니다.

아아아git tag tagName수정

나중에

보면 마지막

에 파일이 추가되지 않았거나 일부 파일이 수정된 것을 발견했습니다. 지금은 새로운 commit 정보를 추가하지 않고 마지막 commit에 추가하기만 하면 됩니다. 이때 commit

git push --tags tagName
로그인 후 복사
로그인 후 복사
commit를 이용하여 임시저장영역에 파일을 추가할 수 있으며, 이때 정보를 수정할 수도 있습니다.

commitreset

도 이전

의 효과를 얻을 수 있지만 다음 명령을 사용하여 이전 reset

git commit --amend <file>
로그인 후 복사
로그인 후 복사
rm 명령을 바꿀 수 있습니다. git rm --cached <file> 매개변수와 결합하면 어떤

노드로든 후퇴하여 작업할 수 있습니다. reset

git reset HEAD <file>
로그인 후 복사
로그인 후 복사
soft이 명령을 실행한 후에는 commit으로 돌아갑니다. .작업공간은 그대로 유지되며 임시저장공간은 당시의 장소로 복원됩니다.

매개변수도 있습니다. indexrreeindexhard의 반대라고 할 수 있는데, 그 효과는 작업 영역과 임시 보관 영역의 차이에 있습니다.

rebasesoft

for

는 리디렉션을 의미합니다. 현재 브랜치와 원격 브랜치

의 정보에 차이가 있는 경우 지금은 진행할 수 없음을 알려드립니다.

제출하기 전에 먼저 원격 rebase 정보를 로컬 정보로 가져와야 합니다. 이 경우 commit 명령을 사용할 수 있습니다. 아래와 같이 현재 push 브랜치 commitrebasedevelop

에서 git使用杂记 명령

git reset --soft index
로그인 후 복사
로그인 후 복사

를 먼저 실행한 후 rebase로 이동해야 합니다. the Remote

git reset --hard index
로그인 후 복사
로그인 후 복사
push각 지점의 최종 상황은 위 사진과 같습니다. 명령어가 기억하기 어렵다면 하나의 명령어를 사용하여 위의 효과를 얻을 수도 있습니다. master
git fetch
git rebase origin/master
로그인 후 복사
로그인 후 복사
이것은

의 간단한 응용이자 일반적인 명령어이기도 합니다. 다음은

의 선택적 매개변수

를 소개합니다. rebaserebase--onto--onto

사용 시나리오: 개발 프로세스 중에 개발을 위해

브랜치에 새 브랜치를 생성할 때 다양한 기능을 개발하기 위해 다양한 브랜치를 생성합니다. 함수 및 일부

도 제출했는데, 현재 원래

브랜치에 잘못된 A이 있는 것을 발견했습니다. Bcommit에 추가하려면 이 잘못된 역시 우수해요. A 당신의 마법의 힘을 뽐낼 시간입니다. commit

git使用杂记

当前处在B分支,要得到上面的结果,只需执行如下命令

git rebase --onto master <b的commit hash code> B
로그인 후 복사
로그인 후 복사

这个不仅可以针对不同的分支,也能作用于同一个分支上。所以针对上面的情况可以只对分支B进行操作,等价命令如下:

git rebase --onto <a的commit hash code> <b的commit hash code> B
로그인 후 복사
로그인 후 복사

--interactive

当我们要修改commit信息的名称时,如果要修改的commit处在第一个时,可以使用

git commit --amend
로그인 후 복사

如果不是第一个时,我们就要使用到rebase--interactive可选参数了,可以简写为-i

git rebase -i <commit hash code>
로그인 후 복사

参数后面的commit hash code为需要修改的commit的前一个。执行之后就会出现如下类似的信息:

pick 137cf0a First coommit
pick 163dc38 Second commit

# Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
로그인 후 복사
로그인 후 복사

根据提示我们可以有6个可选择的操作。相信提示已经说的很明显了,对于我们这种要修改First coommit的情况,需要使用r

r 137cf0a First commit
pick 163dc38 Second commit
로그인 후 복사
로그인 후 복사

执行之后会跳到修该First coomit的界面,进行修改即可。

First commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Thu Jan 26 23:07:10 2017 +0800
#
# rebase in progress; onto f9aee6e
# You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'.
#
# Changes to be committed:
#       new file:   file1
로그인 후 복사
로그인 후 복사

至于其他的操作项,有兴趣的可以自己去尝试一下。例如s操作就可以用来合并commit

branch

相信branch都很熟悉,我这里要说的是他的另一种可能会用到的情况。场景是这样的:如果在你进行创建新的分支时,并不想从当前的commit信息节点进行创建分支。

git使用杂记

要实现如上效果只需在创建分支时在后面再添加额外的参数,该参数就是你所需调到的commit节点的hash code

git branch new_branch <commit hash code>
로그인 후 복사
로그인 후 복사

push

这里提一下push--set-upstream,它的效果是设置上游分支,当我们将远程不存在的本地分支推送到远程时,如果不在推送的分支上,我们一般会使用如下命令进行推送。

git checkout push_branch
git push origin push_branch
로그인 후 복사
로그인 후 복사

下面是简洁的方法,使用该参数无需切换分支,可以直接使用如下命令进行推送。

git push --set-upstream origin push_branch
로그인 후 복사
로그인 후 복사

cherry-pick

这个命令的场景是:当你所在的分支没用,你要删除它,但其中的一个commit你还是想推送到远程master上。

git使用杂记

将分支切换到master,执行以下命令:

git cherry-pick <b的 commit hash code>
로그인 후 복사
로그인 후 복사

merge

我们所熟知的是使用merge来进行分支的合并,每次使用merge时都会自动将副分支合并成一个commit进行推送到主分支上,那么如果我不想它自动推送到主分支上时(可能我还需要进行修改),这时就可以使用--squash操作

git merge --squash dev_branch
로그인 후 복사
로그인 후 복사

执行完以上命令后,我们就可以在暂存区看到一个还未提交的文件状态。

reflog

当我们切分支太频繁了之后,可能会忘了一些分支是从哪个分支切过来的,此时可以使用如下命令查看:

git reflog
로그인 후 복사
로그인 후 복사
894a16d HEAD@{0}: commit: commit another todo
6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman
324336a HEAD@{2}: commit: commit todo
6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger
6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom
6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman
6876e5b HEAD@{6}: commit (initial): initial commit
로그인 후 복사
로그인 후 복사

这样我们就可以看到所用的操作历史了。这样如果我们使用git reset命令不小心删除了需要的东西。可以通过此来查找到删除操作的hash code,之后就可以通过如下命令进行恢复。

git checkout <hash code>
로그인 후 복사
로그인 후 복사

目前想到的就这些了,希望能有所帮助

个人博客:http://www.php.cn/

前言

作为一个开发者,如果现在还不知道git或者还不会使用git,那么你应该好好的反省。自己去好好看一遍的入门介绍吧。今天只是对自己在日常中使用git的一些常用命令的介绍与自己认为不错且能提高我们办公效率的命令。内容可能会有点杂乱,但绝对都是经典的命令,在此记下笔记,也希望能帮助来赏脸关顾的你们。

区域

在这之前,来介绍一下git的三个区域

  • 工作区(working directory)

  • 暂存区(stage index)

  • 本地历史区(history)

通过一张图就能简洁易懂的明白它们之间的转化。

git使用杂记

clone

clone 명령으로 먼저 소개됩니다. git를 사용해본 사람이라면 알 것입니다. git colne 원격 저장소를 로컬로 가져오는 명령입니다. 하지만 지정된 폴더로 가져오고 싶을 때는 직접 mkdir할 수 있습니다. 실제로는 이렇게 할 필요가 없으며, 하나의 명령으로 git clone 远程仓库 文件名하면 됩니다. 매우 간단합니다.

rm

작업 중 이런 상황이 발생할 수 있습니다. git add .을 사용하여 작업 공간의 모든 수정된 파일을 임시 저장 영역에 직접 추가하지만 나중에는 Do가 있다는 것을 알게 됩니다. 먼저 파일을 추가하지 말고 다음 명령을 사용하여 파일을 작업 공간으로 되돌릴 수 있습니다.

git rm --cached <file>
로그인 후 복사
로그인 후 복사

stash

개발 중 온라인 긴급bug이 발생하여 수정이 필요한 상황이 있는데, 현재 개발 중인 기능이 완료되지 않은 상황이고, 제출하고 싶지 않다면 이 시점에서 git stash을 사용하여 작업공간에 모든 파일을 저장할 수 있습니다. 이때 안전하게 브랜치를 잘라내고 복구bug하면 됩니다. 복구가 완료된 후 git stash pop를 실행하여 이전에 저장된 것을 꺼내면 됩니다. 물론 git stash list과 같은 다른 관련 명령도 있습니다. 저장된 기록을 확인하고, git stash drop저장된 기록을 삭제하세요.

태그

개발 중에 git tag tagName 태그를 지정하고 해당 태그를 원격 창고에 푸시해야 할 수도 있습니다. 이 경우 다음 명령을 사용하여 푸시할 수 있습니다.

아아아

수정

나중에commit보면 마지막 commit에 파일이 추가되지 않았거나 일부 파일이 수정된 것을 발견했습니다. 지금은 새로운 commit 정보를 추가하지 않고 마지막 commit에 추가하기만 하면 됩니다. 이때

git push --tags tagName
로그인 후 복사
로그인 후 복사

를 이용하여 임시저장영역에 파일을 추가할 수 있으며, 이때 commit정보를 수정할 수도 있습니다.

reset

reset도 이전 rm의 효과를 얻을 수 있지만 다음 명령을 사용하여 이전 git rm --cached <file>

git commit --amend <file>
로그인 후 복사
로그인 후 복사
명령을 바꿀 수 있습니다.

reset 매개변수와 결합하면 어떤 soft 노드로든 후퇴하여 작업할 수 있습니다. commit

git reset HEAD <file>
로그인 후 복사
로그인 후 복사
이 명령을 실행한 후에는

으로 돌아갑니다. .작업공간은 그대로 유지되며 임시저장공간은 당시의 index 장소로 복원됩니다. index 매개변수도 있습니다. hardrree

의 반대라고 할 수 있는데, 그 효과는 작업 영역과 임시 보관 영역의 차이에 있습니다. soft

rebase

for

는 리디렉션을 의미합니다. 현재 브랜치와 원격 브랜치rebase의 정보에 차이가 있는 경우 지금은 진행할 수 없음을 알려드립니다. commit 제출하기 전에 먼저 원격 push 정보를 로컬 정보로 가져와야 합니다. 이 경우 commit 명령을 사용할 수 있습니다. 아래와 같이 현재 rebase 브랜치 develop

git使用杂记

에서

명령 rebase

git reset --soft index
로그인 후 복사
로그인 후 복사
를 먼저 실행한 후

로 이동해야 합니다. the Remote pushmaster

git reset --hard index
로그인 후 복사
로그인 후 복사
각 지점의 최종 상황은 위 사진과 같습니다. 명령어가 기억하기 어렵다면 하나의 명령어를 사용하여 위의 효과를 얻을 수도 있습니다.

git fetch
git rebase origin/master
로그인 후 복사
로그인 후 복사
이것은

의 간단한 응용이자 일반적인 명령어이기도 합니다. 다음은 rebase의 선택적 매개변수 rebase를 소개합니다. --onto

--onto

사용 시나리오: 개발 프로세스 중에 개발을 위해

브랜치에 새 브랜치를 생성할 때 다양한 기능을 개발하기 위해 다양한 브랜치를 생성합니다. 함수 및 일부 A도 제출했는데, 현재 원래 B 브랜치에 잘못된 commit이 있는 것을 발견했습니다. Acommit에 추가하려면 이 잘못된 역시 우수해요. rebase 당신의 마법의 힘을 뽐낼 시간입니다. mastercommit--onto

은 현재 git使用杂记 브랜치에 있습니다. 위의 결과를 얻으려면 다음 명령을 실행하세요.

git push origin master
로그인 후 복사

이는 다른 브랜치를 대상으로 할 수 있을 뿐만 아니라 또한 동일한 지점에서 작업할 수도 있습니다. 따라서 위의 상황에서는 B 브랜치에서만 작업이 가능합니다.

git pull --rebase origin master
로그인 후 복사

--interactiveB

브랜치의 이름을 수정하고 싶을 때는 다음과 같습니다.

정보를 원할 경우 수정된

이 첫 번째인 경우

git rebase --onto master <b的commit hash code> B
로그인 후 복사
로그인 후 복사
commit를 사용할 수 있습니다. 첫 번째가 아닌 경우 commit의 선택적 매개변수를 사용해야 합니다. 🎜>, 줄여서 로 쓸 수 있습니다.

git rebase --onto <a的commit hash code> <b的commit hash code> B
로그인 후 복사
로그인 후 복사
rebase 매개변수 뒤의 --interactive는 수정이 필요한 -i 앞의 매개변수입니다. 실행 후 다음과 유사한 메시지가 나타납니다.
pick 137cf0a First coommit
pick 163dc38 Second commit

# Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
로그인 후 복사
로그인 후 복사

根据提示我们可以有6个可选择的操作。相信提示已经说的很明显了,对于我们这种要修改First coommit的情况,需要使用r

r 137cf0a First commit
pick 163dc38 Second commit
로그인 후 복사
로그인 후 복사

执行之后会跳到修该First coomit的界面,进行修改即可。

First commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Thu Jan 26 23:07:10 2017 +0800
#
# rebase in progress; onto f9aee6e
# You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'.
#
# Changes to be committed:
#       new file:   file1
로그인 후 복사
로그인 후 복사

至于其他的操作项,有兴趣的可以自己去尝试一下。例如s操作就可以用来合并commit

branch

相信branch都很熟悉,我这里要说的是他的另一种可能会用到的情况。场景是这样的:如果在你进行创建新的分支时,并不想从当前的commit信息节点进行创建分支。

git使用杂记

要实现如上效果只需在创建分支时在后面再添加额外的参数,该参数就是你所需调到的commit节点的hash code

git branch new_branch <commit hash code>
로그인 후 복사
로그인 후 복사

push

这里提一下push--set-upstream,它的效果是设置上游分支,当我们将远程不存在的本地分支推送到远程时,如果不在推送的分支上,我们一般会使用如下命令进行推送。

git checkout push_branch
git push origin push_branch
로그인 후 복사
로그인 후 복사

下面是简洁的方法,使用该参数无需切换分支,可以直接使用如下命令进行推送。

git push --set-upstream origin push_branch
로그인 후 복사
로그인 후 복사

cherry-pick

这个命令的场景是:当你所在的分支没用,你要删除它,但其中的一个commit你还是想推送到远程master上。

git使用杂记

将分支切换到master,执行以下命令:

git cherry-pick <b的 commit hash code>
로그인 후 복사
로그인 후 복사

merge

我们所熟知的是使用merge来进行分支的合并,每次使用merge时都会自动将副分支合并成一个commit进行推送到主分支上,那么如果我不想它自动推送到主分支上时(可能我还需要进行修改),这时就可以使用--squash操作

git merge --squash dev_branch
로그인 후 복사
로그인 후 복사

执行完以上命令后,我们就可以在暂存区看到一个还未提交的文件状态。

reflog

当我们切分支太频繁了之后,可能会忘了一些分支是从哪个分支切过来的,此时可以使用如下命令查看:

git reflog
로그인 후 복사
로그인 후 복사
894a16d HEAD@{0}: commit: commit another todo
6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman
324336a HEAD@{2}: commit: commit todo
6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger
6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom
6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman
6876e5b HEAD@{6}: commit (initial): initial commit
로그인 후 복사
로그인 후 복사

这样我们就可以看到所用的操作历史了。这样如果我们使用git reset命令不小心删除了需要的东西。可以通过此来查找到删除操作的hash code,之后就可以通过如下命令进行恢复。

git checkout <hash code>
로그인 후 복사
로그인 후 복사

目前想到的就这些了,希望能有所帮助

更多git使用杂记 相关文章请关注PHP中文网!

관련 라벨:
git
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿