扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇“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
,其实也是一种 unmodified
状态,版本库会记录你的每一次提交,可以追溯你每一次修改的内容。
文件状态通常可以分为:
不受版本控制的
untracked
状态;受版本控制并且已修改的
modified
状态;受版本控制已修改并提交到暂存区的
staged
状态;从暂存区已经提交到本地仓库的
committed
状态;提交到本地仓库未修改或者从远程仓库克隆下来的
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]
删除缓存中的文件,再提交后该文件就不再纳入版本管理。
若当前操作为误操作,可以通过回滚操作找回文件。
如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -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);
问号(?
)只匹配一个任意字符;
如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
使用两个星号(**
)表示匹配任意中间目录,比如 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
状态;
提交到本地仓库未修改或者从远程仓库克隆下来的 unmodified
状态;
使用git restore --staged [fileName]
或git reset HEAD [fileName]
可以将暂存区文件恢复。
说明:
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 --
是一个危险的命令。 你对那个文件在本地的任何修改都会消失。Git
会用最近提交的版本覆盖掉它。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。
声明:由于没有添加到暂存区的文件无法被追踪,所以它的任何修改是没有办法回退!只能通过本地文件撤销操作进行。
如果想要查看某个项目中所有提交信息,可以使用git log
打印所有参与者的提交记录。
每条记录都会显示提交的SHA-1
校验,作者名字和作者邮箱以及提交时间并按提交时间倒序排列。
除了简单的git log
外,还可以添加参数用于筛选和格式化输出信息:
-p --patch
:它会显示每次提交所引入的差异。 也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交。
--stat
:在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。
--pretty
:这个选项有一些内建的子选项供你使用。 比如 oneline
会将每个提交放在一行显示,在浏览大量的提交时非常有用。 另外还有 short
,full
和 fuller
选项,它们展示信息的格式基本一致,但是详尽程度不一;
$ git log --pretty=oneline
$ git log --pretty=short
$ git log --pretty=full
$ git log --pretty=fuller
修改文件人员与提交文件人员可以不是同一个人,所以在查询日志时会区分修改人与提交人。
以上就是关于“Git惯用操作有哪些”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流