你应该掌握的Git常用操作

获取与创建项目

创建仓库的途径有:

在本地已有的目录,初始化一个新的;

克隆复制一份别人的项目。

git init

在当前目录下创建.git目录,同时当前目录成为一个Git仓库。

git clone

:将http或ssh链接指向的Git仓库拷贝到本地。

:将远程Git仓库拷贝到本地指定目录。

添加与提交

基本流程

使用添加需要追踪的新文件和待提交的更改;

使用和查看有何改动;

使用提交快照。

git add

:将文件添加到缓存区,该文件被标记为被追踪。

:缓存当前目录下所有文件,不包括已删除的文件。

注意,git add只是复制一份当前状态下的该文件到缓存区,该文件之后的修改若不重新git add,则提交的时候,只会将上次git add的缓存提交给仓库。

git commit

将缓存写入仓库中。

工作区->缓存区,是缓存区->仓库

:一次性将缓存区所有文件修改提交到仓库的当前分支。

:自动把所有已经跟踪过的文件缓存,并提交到仓库。常用于跳过步骤快速提交。

:重新提交。此次提交代替上一次提交的结果。尤其适用于提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了的情况。

git status

:显示当前仓库的最新状态。

:当前仓库的最新状态的简介。

git status -s

??表示该文件仅是本地文件。

绿色A表示该文件以前没被提交过,添加到缓存;(提交时会告知仓库添加此快照)。

绿色M表示该文件以前被提交过后,又添加到缓存;(提交时会告知仓库修改此快照)。

绿色D表示该文件以前被提交过后,被本地删除了,又删除缓存;(提交时会告知仓库删除此快照)。

绿色R表示该文件添加到快照时,系统发现某个D快照与其相同,并将D文件名改为该文件名。

红色M表示该文件被本地修改过。

红色D表示该文件被本地删除了。

状态值第一栏是关于缓存区的(绿色),第二栏是关于工作区的(红色)。

git diff

:比较工作区和缓存区的不同。

:比较缓存区和仓库的不同。

:比较指定文件在工作区和缓存区的不同。

:比较指定文件在缓存区和仓库的不同。

:比较两次提交之间的区别。

:比较两个分支之间的区别。

注意:只会比较那些跟踪文件(即过的文件)。

git show

:查看最后一个提交的内容。

:查看倒数第二个提交的内容。

:查看指定提交的内容。

删除与恢复

git rm

主要用于从版本库中删除文件。

:把文件从版本库中删除,不再跟踪。

:将log目录下扩展名为.log的所有文件从版本库中删除,不再跟踪。通常适用于不小心把一些编译、日志、debug文件错误提交到版本库。

:当文件有未提交的缓存区修改时,直接使用会报错。此时执行此命令可强制将文件从缓存区和版本库中删除。

:把文件从版本库中删除,但让文件保留在工作区且不被Git继续跟踪。通常适用于rm文件之后把其添加到.gitignore中。

恢复

:丢弃工作区的修改。此文件必须是Git跟踪的。

修改后仍未放到缓存区,恢复到上一次的状态。

添加到缓存区后又做了修改,恢复到上一次的状态。

:丢弃缓存区的修改,回退到工作区。

:重置所有文件到上次commit的状态。

:将当前分支重置为倒数第2个版本。

:将当前分支重置为指定版本。

版本控制

版本号

Git的版本号是SHA1校验和,而不是用递增的1、2、3……,因为分布式的版本控制系统要确保每个用户的修改记录都是唯一的,不会发生版本号冲突的情况。

表示当前版本,表示上一个版本,HEAD~100表示往上100个版本。

git log

:显示从最近到最远的提交日志。包含每个提交的SHA1校验和、作者的名字和邮箱、提交时间以及提交说明等。

:的简要版

:不仅输出的信息,还带标签等额外信息。

不仅输出的信息,还可查看当前分支什么时候出现了分支、合并。

:查看指定分支的提交日志。

:查看branchA的日志信息(排除branchB的信息)

git reflog

记录每一次的版本改动。包括commit记录、reset版本退回记录。

git tag

:查看所有标签。注意:标签不是按时间列出,而是按字母排序。

:查看指定标签的信息。

:在指定版本号上打上标签。

:切换到指定标签。

:将标签推送给远程仓库。

远程项目

git remote

:添加并关联一个远程库。shortname一般为origin。

以http方式添加

以ssh方式添加

:查看已配置的远程仓库,列出各远程仓库的shortname。

:查看已配置的远程仓库的读写url。

:查看shortname对应的远程仓库的fetch和push等详细信息。

:移除指定的远程仓库。

:重命名一个远程仓库的shortname。

git push

:将本地分支推送到远程仓库。

拉取

:拉取远程仓库最新提交,并合并到指定的本地分支上。

:拉取远程仓库最新提交,但不会自动合并分支。

分支

git branch

:列出本地分支列表。当前分支前会标有。

:列出远程分支列表。

:列出所有分支列表。

:创建新分支。

:删除指定分支。

:查看所有分支的最后一次提交。

git checkout

:切换到指定分支。

:创建并切换到指定分支。

git merge

:将指定分支合并到当前分支上。

合并冲突

不同分支修改了相同区块的代码时,合并分支时git会将此部分标记为冲突,需要用户手动去修改。

冲突文件内容

可用查看冲突详情

冲突详情

可用查看冲突文件,状态标识为UU

冲突文件

手动修改后,使用重新写入缓存区。

子模块

一个大型工程拆分为一些子工程。既有利于降低工程开发难度,也有利于使用现成的方案或第三方方案作为子工程。

添加子模块

步骤

在某工程的根目录下,执行

会多出一个.gitmodules文件,此为子模块配置文件,其内容为

指定submodule在父工程中的位置

指定submodule要跟踪的分支

submodule add添加的子模块默认是处于游离状态的,并不处于任何分支上。

可指定其要跟踪的分支:

git submodule add git仓库路径-b 要跟踪的分支名

或直接在.gitmodules配置文件中对应子模块下增加branch = 要跟踪的分支名

clone一个带子模块的Git仓库

方案1

初始化以及更新子模块:,。

方案2

参数--recursive会递归初始化并更新每个子模块。

更新子模块

先更新子模块,。若嵌套多层子模块,则。

再更新主仓库。

子模块的修改提交

在子模块的根目录下,切换到要修改的分支,再进行代码修改。这是因为submodule的HEAD默认是处于游离状态,它并没在任何分支上。

在子模块的根目录进行Git提交。

在主Git仓库的根目录进行Git提交。

删除子模块

删除子模块的Git缓存,

删除子模块的本地文件,

删除与此子模块相关的配置

修改提交

git config

:列出所有配置信息。

:检查关键字key的配置。如,查看姓名配置。

:为指定命令配置一个别名,可快速输入命令。

:使用可丢弃指定文件在缓存区的修改。

:使用代替。

:使用代替。

:使用代替。

:使用代替。

:使用输出高逼格的日志信息。

git lg输出高逼格的日志

:使用显示最近一次的提交。

git last查看最近一条日志

和:修改姓名和邮箱,去掉可针对每个repo单独设定。

文章来源网络,如有侵权请联系小编

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171212B02WDG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券