Git命令(全)

版权声明:原创文章,转载请注明出处! https://blog.csdn.net/L_15156024189/article/details/86618828

不断补充命令,方便查阅。

基本操作

初始化Git仓库

命令:git init

例:创建test目录,进入test目录,执行git init,如图:

一个名叫test的仓库就初始化好了,test目录下生成.git子目录。

查看仓库状态

命令:git status

例:执行git status,可以查看test仓库状态,如图:

跟踪新文件和向暂存区中添加文件

命令:git add 

扫描二维码关注公众号,回复: 5182637 查看本文章

功能:有两个功能,一是跟踪新文件并提交到暂存区,二是提交修改文件到暂存区

例:该命令是向暂存区添加新文件或者暂存已经修改的已有文件。暂存区是提交之前的一个临时区域,其实就是一个文件。先创建一个要跟踪的文件README.md,执行

touch README.md
ls

 创建和查看文件README.md,如图:

如果执行git status,会显示文件README.md未被跟踪,如图:

执行

git add README.md
git status

向暂存区添加文件和查看仓库状态,如图: 

暂存区文件提交到仓库

命令:git commit

例:执行

git commit -m "First commit"

 如图:

-m参数之后的"Firs commit"是对此次提交的一行描述信息。可以有多行描述,直接执行

git commit

此时会进入默认的vim编辑器,如果之前配置过编辑器(比如notepad++),执行命令后会打开notepad++,如图:

其实就是.git目录下的一个COMMIT_EDITMSG。现在就可以添加多行描述信息了,格式如下:

第一行:默认是空白行,可以在该行用一行文字简述提交的更改内容

第二行:空一行

第三行:从该行之后,可以记述更改的原因和详细内容

注意以#开头的内容将被忽略,会被认为是空,此时如果保存退出,结果会中止提交。再次执行git status,查看仓库状态,如图:

如果想要将修改过的跟踪文件直接提交到仓库,添加-a参数即可,即

git commit -a -m "commit directly"

没有被跟踪的文件不能执行此操作。

 查看提交日志

命令:git log

执行git log,如图:

结果会按时间顺序显示,最新的提交显示在最前面。每条日志构成:commit、SHA-1校验和、作者姓名和邮箱、提交日期以及提交描述。添加-n参数可以列出最近n次提交的日志,如图:

-p参数可以列出每次提交引入的差异,如图:

如果要显示目录或文件的日志,在命令后面加上目录或者文件名:

git log test
git log README.md

其他参数:

--stat:每条提交日志下列出日志统计信息

--pretty=oneline:设置日志输出格式,oneline表示一行输出

--since=2.weeks(或者--after):列出最近两周内的所有提交

--until(或者--before):列出指定时间之前的日志

查看工作树和暂存区差别

命令:git diff

例:现在README.md中添加一行:

# git diff

,执行git diff命令,如图:

此时就能看到工作树和暂存区中README.md文件的差别了。将文件添加到暂存区,再次查看区别,如图:

此时就没区别了。

查看工作树和最近提交的差别

命令:git diff HEAD

例:如图

此时就能看到差别了。HEAD是指向当前分支中最近一次提交的指针。建议在执行git commit命令前先执行git diff HEAD,查看本次提交和上次提交的差别。

移除文件

命令:git rm

效果:从暂存区移除文件状态,并从工作区将文件删除

例:首先从工作目录中删除README.md文件,并查看仓库状态,如图:

此时文件已经从工作树中移除,但是文件移除状态并未提交到暂存区。执行

git rm README.md

命令,就可以将文件移除状态记录到暂存区,如图:

再执行git commit就可以将文件移除状态提交到仓库中。注意直接执行git rm README.md,会将README.md文件从工作区中直接删除。如果已经提交到暂存区的问价被修改后再次提交到暂存区,此时执行git rm README.md,无法删除,如图:

此时添加-f参数才能将从暂存区删除文件状态并从工作区移除文件,如图:

如果只想从暂存区删除文件状态,而将文件仍保留在工作区,添加--cached参数即可,如图:

移动文件

命令:git mv

例:执行命令,工作区的文件会重命名,仓库元数据不会记录此次重命名操作,如图:

如果直接给文件改名,git会认为将源文件删除了,并添加了一个未跟踪的新文件,如图:


分支操作

显示分支列表

命令:git branch

例:执行命令,如图:

列表表示仓库中只有一个master分支,*表示当前我们所在分支。

创建分支

命令:git branch feature-A

例:执行命令创建分支,并显示分支列表,如图:

此时feature-A分支创建成功,当前我们还是在master分支下开发。

切换分支

命令:branch checkout feature-A

例:执行命令切换到feature-A分支,并查看是否切换成功,如图:

feature-A分支前有星号,说明我们现在已经在该分支下,在该分支下修改代码并提交的话,代码会提交到该分支。下面尝试一下,在README.md文件中添加如下一行:

# feature-A

执行添加暂存区和提交仓库命令:

git add README.md

git commit -m "Add feature-A"

,如图:

切换到master分支,查看README.md文件,如图:

发现保持原来状态,并没有添加文字。

同时创建和切换分支

命令:git checkout -b

例:执行命令创建并切换到分支feature-B,如图:

切换到上一个分支

命令:git checkout -

例:刚才是从master分支切换到了feature-B分支,所以master是feature-B的上一个分支,现在执行命令再切回到master分支,如图:

查看每个分支上的最新提交

命令:git branch -v

例:

删除分支

命令:git branch -d [branch-name]

例:

其他分支操作命令

git branch --merged:查看并入当前分支的所有分支;

git branch --no-merged:查看尚未并入的所有分支;

主题(Topic)分支和主干分支

        主题分支,顾名思议,集中实现单一主题,除此之外不进行任何作业的分支。开发中,常常创建多个主题分支,同时再保留一个随时可以发布软件的稳定分支,通常由master分支担当。基于特定主题的作业在主题分支中进行,主题完成后再与master分支合并。这样就能保证master分支可以随时提供查看。

        主干分支是主题分支的原点,同时是合并的终点。通常将master分支作为主干分支。主干分支中没有开发到一半的代码,可以随时提供查看。主干分支有时需要配置在生产环境,有时需要使用Tag创建版本信息。可以创建多个主干分支,同时管理多版本发布。

分支合并

命令:git merge [branch-name]

功能:将branch-name分支合并到当前分支

例:之前创建了feature-A分支,假设现在该分支已经实现完毕,准备将它合并到master分支中,首先切换到master分支,然后执行

git merge feature-A

如图:

如果在合并分支时,想要提交合并分支的描述,在合并时添加--no--ff参数,如图:

执行命令后会打开如下编辑器(事先已经配置为notepad++),如图:

写好描述信息后保存关闭编辑器,命令行显示如图:

查看分支合并

命令:git log --graph

例:执行命令查看feature-A合并到master的日志,如图:

 

更改提交操作

撤销已暂存的文件

命令:git reset HEAD

执行命令将READ.md文件从暂存区撤销,如图:

撤销对文件的修改

命令:git checkout -- [filename]

例:先在文件readme.md中添加一些内容,然后查看仓库状态,再执行git checkout -- readme.md命令,文件readme.md又恢复到未添加内容之前,如图:

重新提交描述

命令:git commit --amend

例:有时提交之后发现忘了添加某些文件或者写错了提交信息,执行上面命令即可修改描述。


远程仓库使用

显示远程仓库

命令:git remote

例:先克隆远程仓库https://github.com/JavaLeb/bigdata到本地remote目录,如图:

进入bigdata目录,执行命令查看远程仓库,如图:

添加-v参数可以查看每个远程仓库名称和对应的URL,如图:

添加远程仓库

命令:git remote add

例:添加一个远程仓库https://github.com/JavaLeb/algorithm,如图:

从远程仓库获取和拉取数据

命令:git fetch [remote-name]

例:先在https://github.com/JavaLeb/bigdata远程仓库中,添加一个新的文件,如图:

这是新建文件,本地仓库还没有,现在将这个文件拉取下来,如图:

数据已经被拉取下来,但是不会自动将数据合并到本地工作区,也不会修改工作区任何数据,执行合并命令,如图:

此时才将文件拉取到本地工作区。

将数据推送到远程仓库

命令:git push [remote-name] [local-branch-name[:remote-branch-name]]

例:假设之前其他人已经推送数据到origin远程仓库,如果你直接推送,会报错,如图:

推送前需要先拉取别人的数据并合并到自己的工作区后才能推送。如图:

git push origin master,是将本地仓库master分支推送到远程仓库origin的 master仓库,更详细的写法应该是:

git push origin refs/heads/master:refs/heads/master

如果想将本地master分支推送到远程仓库的hotfix分支,应该执行:

git push origin master:hotfix

本地创建分支跟踪远程分支

命令:git checkout -b [local-branck-name] [remote-name/remote-branch-name]

例:git checkout -b hotfix origin/hotfix,此时在本地创建了一个hotfix跟踪远程仓库的hotfix,并切换到hotfix下。

检查远程仓库

命令:git remote show [remote-name]

例:

重命名远程仓库

命令:git remote rename [oldname] [newname]

例:

删除远程仓库

命令:git remote rm ag

例:

克隆仓库的.git目录

命令:git clone --bare [store-name] [.git-name]

例:例如仓库testgit中有工作区等目录,现在只拷贝.git目录下的所有文件,而不需要工作区,就可以使用下面命令:

git clone --bare testgit testgit.git

导出的仓库是.git目录下的文件,现在就导出到testgit.git目录下了,如图:


标记

Git标记有两种类型:轻量标签(lightweight tag)和注释标签(aunotated tag),注释标签作为对象存储在Git数据库中,包含标记者名字、邮箱、创建时间和标记信息等,而轻量标签只是一个指向某次提交的指针,不包含上面标记信息,一般作为临时标签。推荐创建注释标签。

创建注释标签

命令:git tag -a [tag-name] -m [tag message]

例:创建一个v1.0注释标签,如图:

列举标签

命令:git tag

例:查看刚创建的注释标签,如图:

查看标签

命令:git show [tag-name]

例:

显示出了标签数据以及对应的提交。

创建和查看轻量标签

命令:git tag [tag-name]

例:创建轻量标签不需要添加-a和-m等参数,一般在轻量标签后添加lw后缀,以与注释标签区分,如图:

猜你喜欢

转载自blog.csdn.net/L_15156024189/article/details/86618828