获取与创建项目
创建仓库的途径有:
在本地已有的目录,初始化一个新的;
克隆复制一份别人的项目。
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单独设定。
文章来源网络,如有侵权请联系小编
领取专属 10元无门槛券
私享最新 技术干货