이 글은 Git에 대한 관련 지식을 제공합니다. 주로 웨어하우스 생성, 파일 보기, 파일 추가, 콘텐츠 수정 및 기타 관련 문제를 포함한 일반적인 운영 문제를 요약합니다.
추천 학습: "Git Tutorial"
웨어하우스를 만들어야 하는 위치를 열고 Git
명령 인터페이스를 열거나 다음을 입력하세요. 터미널 터미널 초기화의 git
웨어하우스를 생성합니다. Git
命令界面或Terminal终端输入git init
创建仓库。
创建完成后得到提示Initialized empty Git repository in /Users/huaqiangsun/Git/.git/
已初始化空的Git
仓库在当前目录中,同时可以看到目录中多出来.git
文件夹(一般为隐藏文件夹,Mac下可通过shift + cmd + .
组合快捷键查看隐藏文件)。
提起Git
,常常会提到工作区、暂存区、版本库概念,这是很通用的说法,其实工作区一般就是指我们能看到的文件、本地操作文件所在的目录,我们正常编写的代码文件、管理的资源文件都是在工作区里操作,这里的文件又细分为受版本控制的文件和不受版本控制的文件。
提到暂存区,就和index
文件建立了联系,工作区的新文件和已经修改受版本控制的文件,使用 git add file_name
就可以添加到暂存区,相当于登记报个名,以后提交到版本库的时候会把这些登记的文件都带上,实际上执行了 git add
命令的文件都生成了对应的 object 对象,放在.git/objects
目录下,状态变为 staged
, 当提交到版本库时,分支会引用这些对象。
版本库就是文件修改的目的地了,最终的修改会提交到版本库,这时提交的文件状态变成 committed
,其实也是一种 <code>unmodified 状态,版本库会记录你的每一次提交,可以追溯你每一次修改的内容。
文件状态通常可以分为:
- 不受版本控制的
untracked
状态;- 受版本控制并且已修改的
modified
状态;- 受版本控制已修改并提交到暂存区的
staged
状态;- 从暂存区已经提交到本地仓库的
committed
状态;- 提交到本地仓库未修改或者从远程仓库克隆下来的 <code>unmodified 状态;
使用git status
可以看到当前仓库的文件修改和未提交文件情况。
其中,
Changes to be committed
为暂存区已存在,需要进行提交进仓库的文件;Changes not staged for commit
为文件被操作尚未提交至暂存区的文件,此类文件需要使用add
将其添加至缓存区再提交进仓库;Untracked files
为未入暂存区文件;
当修改后的文件添加至暂存区后,在提交之前再次进行修改后,非暂存区会再次出现该文件,需再次add
添加入暂存区,否则直接commit
后仓库中的文件不会包含二次修改的内容。
总结
git status
只能查看未传送提交的次数,不能查看具体文件信息;git cherry -v
只能查看未传送提交的描述/说明;git log master ^origin/master
则可以查看未传送提交的详细信息;
使用git add [fileName ...]
用于将文件添加至暂存区中。
若未提示信息则表示文件添加成功。
添加文件需要填写正确的文件路径,若需要添加多个文件使用空格分隔。
使用git commit -m "description"
用于将已添加到暂存区的文件进行提交,每次提交可提交多个文件。
当从磁盘删除已提交给仓库中的文件时,由于仓库缓存中还存在该文件,所以使用git rm [fileName]
Git
저장소가 현재 디렉토리에서 초기화되었으며 추가 .git
폴더(일반적으로 숨겨진 폴더이므로 Mac에서 shift + cmd + .
단축키 조합을 사용하여 숨겨진 파일을 볼 수 있습니다). 2. 웨어하우스 파일 상태 확인🎜🎜 Git
을 언급할 때 작업공간, 준비 영역, 버전 라이브러리 개념이 자주 언급됩니다. 실제로 작업공간이란 일반적으로 우리가 볼 수 있는 파일과 로컬 작업 파일이 위치한 디렉터리를 의미하며, 우리가 일반적으로 작성하는 코드 파일과 관리하는 리소스 파일은 모두 작업공간에서 세분화되어 작동됩니다. 버전 관리 대상 파일과 버전 관리 대상이 아닌 파일로 구분됩니다. 🎜🎜스테이징 영역의 경우 index
파일에 연결됩니다. 작업 공간의 새 파일과 수정되어 버전 관리 중인 파일의 경우 git add file_name을 사용하세요.
임시 저장 영역에 추가하는 것은 나중에 저장소에 제출할 때 실제로 git add
를 실행하는 모든 파일을 가져옵니다. > 명령을 실행하면 해당 파일이 생성됩니다. 개체 개체는 .git/objects
디렉터리에 배치되며 저장소에 제출되면 상태가 staged
가 됩니다. 이러한 개체를 참조하십시오. 🎜🎜저장소는 파일 수정의 대상입니다. 이때 제출된 파일의 상태는 실제로는 의 일종인 <code>committed
가 됩니다. 수정되지 않은 상태인 경우 저장소는 귀하가 제출한 모든 내용을 기록하고 귀하가 수정한 모든 내용을 추적할 수 있습니다. 🎜🎜파일 상태는 일반적으로 다음과 같이 나눌 수 있습니다: 🎜🎜
추적되지 않음
버전 제어 대상이 아닌 상태;- 수정됨 상태;
준비됨
상태는 버전 제어 하에 수정되어 준비 영역에 제출되었습니다.- 준비 영역에서 로컬 창고에
committed
상태로 제출되었습니다.수정되지 않은
상태가 수정되지 않고 원격 창고에서 복제되어 로컬 창고에 제출되었습니다. ul>
git status
를 사용하여 현재 웨어하우스의 파일 수정 사항과 커밋되지 않은 파일을 확인하세요. 🎜🎜 그 중 🎜🎜수정된 파일이 임시 저장 영역으로 다시 수정한 후 제출하면 비임시 저장 영역이 됩니다. 파일이 다시 나타나면
커밋할 변경 사항
은 임시 저장 영역에 이미 존재하며 창고에 제출해야 하는 파일입니다.단계화되지 않은 변경 사항입니다. for commit
작업 후 스테이징 영역에 제출되지 않은 파일의 경우 해당 파일을add
를 사용하여 캐시 영역에 추가한 다음 웨어하우스에 제출해야 합니다.li>추적되지 않은 파일
임시저장영역에 추가되지 않은 파일입니다.
추가
하여 임시 저장 영역에 다시 추가해야 합니다. 그렇지 않으면 창고에 있는 파일입니다. 커밋
이후에는 2차 수정 내용이 포함되지 않습니다. 🎜🎜요약🎜🎜3. 준비 영역에 파일 추가🎜🎜
git status
는 전송되지 않은 제출 수만 볼 수 있고 특정 파일 정보는 볼 수 없습니다.git Cherry -v
는 전송되지 않은 커밋의 설명/지침만 볼 수 있습니다.git log master ^origin/master
는 전송되지 않은 커밋을 볼 수 있습니다. information;
git add [fileName ...]
를 사용하여 준비 영역에 파일을 추가하세요. 🎜🎜메시지가 표시되지 않으면 파일이 성공적으로 추가되었음을 의미합니다. 🎜🎜파일을 추가하려면 올바른 파일 경로를 입력해야 합니다. 여러 파일을 추가해야 하는 경우 공백으로 구분하세요. 🎜🎜4. 준비 영역에 파일 제출🎜🎜git commit -m "description"
을 사용하여 준비 영역에 추가된 파일을 제출할 때마다 여러 파일을 제출할 수 있습니다. 🎜🎜5. 웨어하우스에서 파일 제거 🎜🎜웨어하우스에 제출된 파일을 디스크에서 삭제할 때 해당 파일이 웨어하우스 캐시에 아직 남아 있으므로 git rm [fileName]
을 사용하여 삭제하세요. 캐시 삭제 파일이 제출되면 더 이상 버전 관리에 포함되지 않습니다. 🎜🎜현재 작업이 실수인 경우 롤백 작업을 통해 파일을 복구할 수 있습니다. 🎜이전에 수정되었거나 임시저장공간에 있던 파일을 삭제하려면 강제삭제 옵션 -f
매개변수를 사용해야 합니다. -f
配参。
若由于误操作将一些非必要文件提交至仓库,可以使用--cached
,只删除仓库中的记录并不从磁盘上删除。
git rm
命令后面可以列出文件或者目录的名字,也可以使用 glob
模式。例如:git rm log/*.log
。
注意星号 *
之前的反斜杠 , 因为
Git
有自己的文件模式扩展匹配方式,所以不用 shell
来帮忙展开。 此命令删除 log/
目录下扩展名为 .log
的所有文件。
对于一些日志文件、临时文件以及一些软件生成的配置或输出文件并不需要进行文件管理,所以可以创建一个.gitignore
文件将需要忽略的文件名称或表达式写入.gitignore
文件,以实现忽略文件的目的。
文件 .gitignore
格式规范如下:
#
开头的行都会被 Git 忽略。glob
模式匹配,它会递归地应用在整个工作区中。/
)开头防止递归。/
)结尾指定目录。!
)取反。git
同样支持Glob
模式,Glob
模式为Shell
中简化的正则表达式。
*
)匹配零个或多个任意字符;[abc]
匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);?
)只匹配一个任意字符;**
)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。.gitignore
文件生效步骤如下:
git status --ignored
// 查看状态,验证是否已包括忽略的文件
git rm -r --cached .
// 清除缓存,-r表示递归删除
git status --ignored
// 查看具体效果
git add .
// 重新trace file
git commit -m "update .gitignore"
// 提交和注释
使用git status
只能查看每个文件的修改状态,但是无法看到每个文件的内容有哪些被修改,所以可以使用git diff
查看所有追踪文件的修改对比。
需要注意的是,git diff
是查看未暂存的文件中被修改的内容,当将该文件添加入暂存区后,就无法再通过git diff
查看修改内容,需要使用git diff --cached
。
当需要重命名文件时,可以使用git mv [oldFileName] [new FileName]
。Git
对于重命名操作会分为三步进行,第一步首先重命名文件,然后再从仓库中删除原有的文件,最后将新文件添加进暂存区等待提交。
$ mv README.md LOOKME.md $ git rm README.md $ git add LOOKME.md
若通过软件进行批量修改文件时,也要按照该流程先删除原文件再添加新文件。
当由于一些操作失误提交或修改了文件内容时,可以通过Git
回滚操作,回滚到修改之前的状态。
回忆下前面提到的文件状态,文件状态通常可以分为:
untracked
状态;modified
状态;staged
状态;committed
状态;使用git restore --staged [fileName]
或git reset HEAD [fileName]
--cached
를 사용하면 디스크에서 삭제하지 않고 웨어하우스에 있는 기록만 삭제할 수 있습니다. 🎜🎜 git rm
명령 뒤에 파일이나 디렉터리 이름을 나열하거나 glob
모드를 사용할 수 있습니다. 예: git rm log/*.log
. 🎜🎜별표 *
앞의 백슬래시
에 주의하세요. Git
에는 고유한 파일 패턴 확장자 일치 방법이 있으므로 shell은 확장하는 데
가 필요하지 않습니다. 이 명령은 log/
디렉터리에서 .log
확장자를 가진 모든 파일을 삭제합니다. 🎜.gitignore
를 생성할 수 있습니다. 파일은 파일 무시 목적을 달성하기 위해 무시해야 하는 파일 이름이나 표현식을 .gitignore
파일에 씁니다. 🎜🎜 .gitignore
파일의 형식 사양은 다음과 같습니다. 🎜#
로 시작하는 줄은 Git에서 무시됩니다. glob
패턴 일치를 사용할 수 있습니다. /
)로 시작할 수 있습니다. /
)로 끝날 수 있습니다. !
)를 추가하여 무시할 수 있습니다. git
은 Glob
모드도 지원하며 Glob
모드는 Shell의 단순화된 버전입니다. 코드> 정규식. 🎜<ul>
<li>별표(<code>*
)는 0개 이상의 모든 문자와 일치합니다.
[abc]
는 정사각형 안의 문자에 있는 모든 열과 일치합니다. 대괄호(이 예는 a, a b 또는 c와 일치함);?
)는 하나의 임의 문자에만 일치합니다.**
)를 사용하세요. 예를 들어 a/**/z는 a/z, a/b/z 또는 a/와 일치할 수 있습니다. b/c/z 등 .gitignore
파일을 적용하는 단계는 다음과 같습니다: 🎜
- 🎜
git status --ignored // 상태를 확인하고, 무시된 파일이 포함되었는지 확인하세요🎜
- 🎜
git rm -r --cached .
// 캐시를 지우고, -r은 의미합니다. 재귀적 삭제🎜- 🎜
git status --ignored
// 구체적인 효과를 확인하세요🎜- 🎜
git add .
// 파일 재추적🎜- 🎜
git commit -m "update .gitignore"
// 커밋 및 주석 달기 🎜
git status
를 사용하면 각 파일의 수정 상태만 볼 수 있고 각 파일의 어떤 내용이 수정되었는지 확인할 수 없으므로 git diff를 사용하면 됩니다.
를 클릭하면 모든 추적 파일의 수정 상태를 확인할 수 있습니다. git diff
는 스테이지되지 않은 파일의 수정된 내용을 보는 데 사용됩니다. 파일이 스테이징 영역에 추가되면 더 이상 git diff
를 통해 사용할 수 없습니다. 수정 사항을 보려면 git diff --cached
를 사용해야 합니다. 🎜git mv [oldFileName] [new FileName]
을 사용할 수 있습니다. Git
은 세 단계로 이름 바꾸기 작업을 수행합니다. 첫 번째 단계는 파일 이름을 바꾼 다음 웨어하우스에서 원본 파일을 삭제하고 마지막으로 새 파일을 준비 영역에 추가하여 제출을 기다리는 것입니다. 🎜$ git log --pretty=oneline🎜소프트웨어를 통해 파일을 일괄 수정하는 경우에도 이 프로세스에 따라 원본 파일을 먼저 삭제한 다음 새 파일을 추가해야 합니다. 🎜
Git
롤백 작업을 사용하여 수정 전 상태로 롤백할 수 있습니다. . 🎜🎜앞서 언급한 파일 상태를 기억하세요. 파일 상태는 일반적으로 다음과 같이 나눌 수 있습니다: 🎜추적되지 않음
버전 제어 대상이 아닌 상태,modified
상태;staged
상태;committed
상태, 수정 없이 로컬 창고에 제출된 <code>unmodified
상태 또는 원격 창고에서 복제됨 git Restore --staged [fileName]
또는 git Reset HEAD [fileName] 준비 영역 파일 복구를 복원합니다. 🎜<blockquote><p>참고: <code>git Restore
명령은 Git 2.23
버전 이후에 새로 추가되었습니다. git checkout
명령의 기능을 공유하는 데 사용됩니다. . 임시 저장 영역 또는 저장소의 파일을 사용하여 로컬 파일의 수정 사항을 덮어쓰는 동시에 수정 사항 롤백 목적을 달성하기 위해 저장소의 파일을 사용하여 임시 저장 영역의 파일을 덮어쓸 수도 있습니다. git add
명령. git restore
命令是 Git 2.23
版本之后新加的,用来分担 git checkout
命令的功能,通过用暂存区或者版本库中的文件覆盖本地文件的修改,以达到回退修改的目的,同时也可以使用版本库中的文件覆盖暂存区的文件,达到回退git add
命令的目的。git checkout
命令重新检出一份文件来覆盖本地的修改。
git reset
其实就是用来设置分支的头部指向,当进行了一系列的提交之后,忽然发现最近的几次提交有问题,想从提交记录中删除,这是就会用到 git reset
命令,这个命令后面跟 commit id
,表示当前分支回退到某个 commit id
对应的状态,之后的日志记录被删除,工作区中的文件状态根据参数的不同会恢复到不同的状态。
--soft
: 被回退的那些版本的修改会被放在暂存区,可以再次提交。
--mixed
: 默认选项,被回退的那些版本的修改会放在工作目录,可以先加到暂存区,然后再提交。
--hard
: 被回退的那些版本的修改会直接舍弃,就像它们没有来过一样。
使用 git rest HEAD file_name
命令就可以将一个文件回退到 HEAD
指向版本所对应的状态,其实就是当前版本库中的状态,也就相当于还原了本地的修改。
对于工作区中未加到暂存区和版本库的文件,执行了 git add
操作之后可通过如下方法还原:
git rm --cached newfile
git restore --staged newfile
git reset HEAD newfile
注:使用后两个命令的时候不能是版本库的第一个文件。
使用git checkout -- [fileName]
可以将该文件回滚到上一次提交的状态。
!注:记得git checkout -- <file></file>
是一个危险的命令。 你对那个文件在本地的任何修改都会消失。Git
会用最近提交的版本覆盖掉它。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。
声明:由于没有添加到暂存区的文件无法被追踪,所以它的任何修改是没有办法回退!只能通过本地文件撤销操作进行。
如果想要查看某个项目中所有提交信息,可以使用git log
打印所有参与者的提交记录。
每条记录都会显示提交的SHA-1
校验,作者名字和作者邮箱以及提交时间并按提交时间倒序排列。
除了简单的git log
外,还可以添加参数用于筛选和格式化输出信息:
-p --patch
:它会显示每次提交所引入的差异。 也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交。
--stat
:在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。
--pretty
:这个选项有一些内建的子选项供你使用。 比如 oneline
会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还有 short
,full
和 fuller
选项,它们展示信息的格式基本一致,但是详尽程度不一;
使用formart
!! 이 작업은 분기 레코드에 영향을 미치지 않으며 파일을 다시 확인하여 로컬 수정 사항을 덮어쓰는 이전 git checkout
명령과 동일합니다.
git Reset
은 실제로 브랜치의 헤드 포인트를 설정하는 데 사용됩니다. 일련의 제출을 마치고 갑자기 최근 제출에 문제가 있음을 발견하고 싶었습니다. 삭제하면 git Reset
명령이 사용됩니다. 이 명령 뒤에는 commit id
가 옵니다. 이는 현재 분기가 특정 commit id
해당 상태, 후속 로그 기록은 삭제되고 작업 공간의 파일 상태는 다른 매개 변수에 따라 다른 상태로 복원됩니다. 🎜--soft
: 롤백된 버전의 수정 사항은 임시 저장 영역에 저장되며 다시 제출할 수 있습니다. 🎜--mixed
: 기본 옵션으로, 롤백 버전에 대한 변경 사항은 작업 디렉터리에 먼저 저장되고 준비 영역에 추가됩니다. 그런 다음 제출했습니다. 🎜--hard
: 롤백된 버전의 수정 사항은 마치 전혀 오지 않은 것처럼 직접 삭제됩니다. 🎜git Rest HEAD file_name
명령을 사용하여 HEAD
가 가리키는 버전에 해당하는 상태로 파일을 롤백하세요. 현재 버전 라이브러리의 상태는 로컬 수정 사항을 복원하는 것과 동일합니다. 🎜🎜스테이징 영역과 저장소에 추가되지 않은 작업 공간의 파일은 git add
작업을 실행한 후 다음 방법으로 복원할 수 있습니다. 🎜git rm - -캐시된 새 파일
git 복원 --단계화된 새 파일
git 재설정 HEAD 새 파일
🎜참고: 후자의 두 명령을 사용할 때는 저장소의 첫 번째 파일이 될 수 없습니다. 🎜git checkout -- [fileName]
을 사용하여 파일을 마지막으로 제출된 상태로 롤백하세요. 🎜🎜! 참고: git checkout -- <file></file>
은 위험한 명령이라는 점을 기억하세요. 해당 파일에 대한 모든 로컬 수정 사항은 손실됩니다. Git
는 가장 최근에 커밋된 버전으로 덮어씁니다. 해당 파일을 로컬에서 수정하지 않으려는 경우가 아니면 이 명령을 사용하지 마십시오. 🎜🎜설명: 준비 영역에 추가되지 않은 파일은 추적할 수 없으므로 해당 파일에 대한 수정 사항은 롤백할 수 없습니다! 이는 로컬 파일 실행 취소 작업을 통해서만 수행할 수 있습니다. 🎜git log
를 사용하여 모든 참가자의 제출 기록을 인쇄할 수 있습니다. . 🎜🎜각 기록에는 제출된 SHA-1
확인, 작성자 이름 및 이메일 주소, 제출 시간이 제출 시간의 역순으로 표시됩니다. 🎜🎜 간단한 외에 git log-p --patch
: 도입된 변경 사항이 표시됩니다. 커밋마다 차이가 있습니다. 또한 표시되는 로그 항목 수를 제한할 수도 있습니다. 예를 들어 -2 옵션을 사용하면 가장 최근 커밋 두 개만 표시할 수 있습니다. 🎜🎜--stat
: 각 커밋 아래 수정된 모든 파일, 수정된 파일 수, 수정된 파일 중 제거되거나 추가된 줄을 나열합니다. 각 제출물 끝에 요약도 있습니다. 🎜🎜--pretty
: 이 옵션에는 사용할 수 있는 몇 가지 하위 옵션이 내장되어 있습니다. 예를 들어 oneline
은 각 제출물을 한 줄에 표시하므로 많은 수의 제출물을 탐색할 때 매우 유용합니다. 기본적으로 동일한 형식으로 정보를 표시하는 짧은
, 전체
및 전체
옵션도 있지만 세부정보 수준은 다양합니다. 🎜🎜 형식
을 사용하여 사용자 정의 인쇄 형식을 정의합니다. 일반적으로 사용되는 형식 정보는 다음과 같습니다. 🎜🎜🎜$ git log --pretty=oneline
$ git log --pretty=short
$ git log --pretty=full
$ git log --pretty=fuller
修改文件人员与提交文件人员可以不是同一个人,所以在查询日志时会区分修改人与提交人。
推荐学习:《Git学习教程》
위 내용은 자세한 요약! Git 일반 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!