当前位置:C++技术网 > 资讯 > 从未接触Git也可快速学会的秘籍

从未接触Git也可快速学会的秘籍

更新时间:2020-03-25 10:57:25浏览次数:1+次

    本文针对Git常用的17个应用场景提供了简要的命令整理和必要的说明,可以让你快速上手Git。适用于从未接触Git的新手或有Git经验的同学,不适用于专家。讲解的顺序为从配置到创建再到使用,作为一个主线将这17个场景讲解完毕。重点是需要去动手操作,边看边练习,这样可以快速学会Git。而对于有Git经验的同学,本文可以作为一个工具手册备查或完整的梳理。

一、配置Git并创建目录

    每一个Git客户端都需要一个地址,所以需要先配置好。加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。配置文件为隐藏文件。

仓库的配置文件路径:.git/config

用户的配置文件路径:系统的用户目录下的.gitconfig

配置用户信息:

git config --global user.name "名字"
git config --global user.email "邮箱地址"

创建库工作区目录(dos命令,Linux命令未列出,请自行对应):

mkdir 目录
cd 目录


二、初始化Git版本仓库

    在上一步执行了切换目录cd命令,然后在这个目录下执行以下初始化命令。这样,这个目录就成为了Git版本仓库目录。

git init


三、将文件存入工作区目录

    将文件放入工作区目录,和将文件存放在普通目录一下。

四、添加并提交版本
    版本描述里不能含有敏感字符串,比如commit或add之类的。-m是添加描述的参数。仅将文件放到工作区目录,是不会自动提交到版本库的。需要先使用add将文件添加到暂存区,然后用commit将暂存区的所有文件提交到版本库。add只将工作区文件修改添加到暂存区,commit只将暂存区文件修改提交到版本库。如果仅仅是工作区变动了文件,没有add,那commit是不会将工作区的变动提交到版本库的。
工作区:用户可见的文件夹,和普通文件夹一样。
暂存区:文件的修改信息被添加到暂存区,是一个临时存放待提交文件的位置。
版本库:最终的版本库存放文件的位置。 
git add 文件名
git commit -m "版本提交说明" 

五、查看提交的记录
    查看提交的记录,可以看到详细历史提交信息。[]为可选参数。 pretty美化输出,graph图形化输出,abbrev-commit缩略提交信息 。
git log [--pretty=oneline] [--graph] [--abbrev-commit] 

六、查看执行的命令的历史记录
    查看执行的命令的历史记录信息,信息里包含里提交ID (commit_id) ,此ID在其他地方很有用。 
git reflog

七、查看git状态
    每次文件修改操作,git的状态都会变化,我们可以跟踪状态的变化来得知操作的结果。
git status

八、查看工作区和版本库的文件区别
要查看工作区文件和版本库文件之间的区别,可以使用diff命令。
git diff 提交ID -- 文件名

九、撤销修改
    撤销修改分为工作区撤销、暂存区撤销和版本库撤销。HEAD为当前最新版本,HEAD^为上个版本,HEAD^^为上上个版本,以此类推,一个^表示一个上级版本。版本数太多,可以用~数字来表示,如HEAD~10即当前的往上10个版本。这些写法是提交ID的人性化写法。

撤销工作区的单个文件用checkout:
git checkout -- 文件名
版本库-->工作区(暂存区无文件)  ,  暂存区-->工作区(暂存区有文件)。目标仅为工作区。如果暂存区有文件,此时又需要撤销工作区,那么就需要先撤销暂存区的,即使用reset先撤销暂存区的文件,然后再用checkout来撤销工作区的文件。  

撤销工作区所有文件用reset:
git reset --hard HEAD
版本库-->工作区。将版本库内容直接全部同步到工作区,整个版本库同步下来撤销工作区的修改。   
  
撤销暂存区用reset:
git reset HEAD 文件名
版本库-->暂存区。目标仅为暂存区。撤销了暂存区的文件,暂存区就没有这个文件了。再提交则无文件提交了。  

撤销版本库用reset:
git reset  --hard 提交ID (commit_id)
版本库-->版本库。当前版本库会修改为提交ID所代表的版本。版本切换可用于回滚、还原、撤销等用途,会将版本库的文件同步到工作区。

十、删除文件
    先在工作区将文件删除,然后使用git rm命令将删除操作提交到暂存区,然后执行git commit提交到版本库,此时才会真正从版本库删除指定的文件。如果仅工作区删除了文件,没有执行git rm命令,是无法删除版本库的文件的,原理同添加文件。只有手动执行命令才能生效。如果在工作区没有删除文件,而直接执行git rm命令并git commit之后,工作区的文件也就自动被删除了。  
git rm 文件名

十一、查看文件列表
    文件列表包含工作区文件列表、暂存区文件列表和版本库文件列表。列表可以用文件名列表形式展示,也可以用详细的文件信息列表展示。工作区文件列表在本地文件夹直接就可以打开查看。暂存区和工作目录都只有一个,而版本库可以有很多个。所以版本库文件列表可以指定提交ID来查看。

版本库文件列表:
git ls-tree -l 提交ID
暂存区文件名列表:
git ls-files
暂存区文件详细信息列表:(先得到树ID,用前面得到的树ID来查看详细的文件列表信息)
git write-tree
git ls-tree 树ID

十二、远程仓库
    在GitHub创建一个仓库,命名。然后就可以在本地执行命令,将本地的仓库关联到Github上的库。本地库可以通过不同的远程库名来关联多个远程库。这里的远程库以GitHub举例,其他远程库类似。

添加远程仓库,注册本地显示的远程仓库名称:(不同的远程仓库,仅后面的地址不一样)
git remote add 远程库名称(本地显示) git@github.com:GitHub账号/GitHub库名.git
推送本地库分支到远程库:(第一次加参数-u,以后推送不需要)
git push [-u] 远程库名称(本地显示) 本地库分支名(默认主分支为master)
查看远程库信息:
git remote [-v]
创建远程库的分支到本地分支:
git checkout -b 本地分支名 远程库名/远程库分支名
将远程库克隆到本地库:
git clone git@github.com:GitHub账号/GitHub库名.git
将远程库分支关联到本地库分支:
git branch --set-upstream-to=远程库名/远程库分支名 本地分支名
拉取远程库分支:
git pull [远程库 远程分支]
    先将远程库分支和本地分支关联起来,然后就可以直接拉取远程库分支到本地分支了。拉取远程库分支到本地分支会自动进行合并。如果自动合并失败,就需要自己手动合并了。如果不设置关联分支,可以每次在pull的时候指定远程库和远程分支。合并冲突后,你需要将你本地的分支的内容进行处理,然后再在本地分支提交不冲突的版本,再次pull就可以自动合并了,然后可以将本地分支推送到远程分支。

合并分支线为直线:
git rebase
简单理解:相当于把本地的未提交的分支直接提交到了远处分支,避免了合并分支产生的多条分支线。rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

删除关联远程库:
git remote rm 远程库名

十三、分支管理
    Git用(HEAD -> master)和(origin/master)区分本地分支(前者)和远程分支(后者)。一个工作区对应一个暂存区和当前分支的当前版本库。当切换分支的时候,会先清空工作区文件,然后将当前分支的文件同步到工作区。如果工作区有分支不存在的额外文件时,这些额外的文件不会被删除。
    合并分支到当前分支,相当于在当前分支新增加了一个版本,此版本成为当前最新版本。默认可能保存了合并记录即禁用了Fast forward模式。如果没有禁用Fast forward模式,那么合并分支信息将不会保存在记录中。可以加上参数【--no-ff -m '描述'】,强制执行禁用Fast forward模式保存合并记录。  

开发中建议的分支有:
主分支:稳定的版本master
开发分支:不稳定的开发版本dev,稳定后合并到主分支master中。
bug分支:用于修复bug,修复bug后合并到开发分支。
feature分支:用于开发新需求,开发完后合并到开发分支。
文档分支:用于存储开发文档,修改后的文档合并到开发分支,最终文档由开发分支合并到主分支。  

创建分支:
git branch 分支名 (无分支名即查看分支列表,前面有*的为当前分支)
切换分支:
git checkout 分支名
创建并切换分支:
git checkout -b 分支名
合并分支:
git merge 分支名 (将指定分支名的内容合并到当前分支)
删除分支:
git branch -d 分支名 (强行删除用D)
强制禁止执行Fast  forward以保存合并记录: 
git merge --no-ff -m '描述' 分支名

十四、存储快照
    当需要使用新分支工作的时候,当前工作区有文件,暂不能提交,也不能撤销,不能丢失,那么就可以将当前快照存储起来。快照存储后,工作区和暂存区都恢复为当前版本库的文件。快照指的是工作区、暂存区等相关信息的集合。如果不指定stash编号(如stash@{0}),则默认使用最新一次存储的快照编号。多次恢复快照,会将快照里的内容叠加到暂存区和工作区。最后可以一次性提交。

存储快照命令:
git stash
查看快照列表:
git stash list
恢复但不删除快照:
git stash apply stash编号 
删除快照:
git stash drop  stash编号
恢复且删除最新一个快照: 
git stash pop

十五、提交标签
    标签总是和某个提交ID挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。标签列表按字母排序显示,非时间顺序。

查看所有标签列表:
git tag
打标签:
git tag -a 标签名 [-m "标签描述"] [commit_id(提交ID,不写则为最新的提交)]
查看标签信息:
git show 标签名
删除标签:
git tag -d 标签名
标签推送到远程库:
git push 远程库名 标签名
一次性推送所有本地标签到远程库:
git push 远程库名 --tags
删除远程库标签要先删除本地标签,然后再远程删除:
git push 远程库名 :refs/tags/标签名

十六、忽略提交文件
    要忽略提交文件,先提交一个.gitignore文件。这个文件里面记录着忽略提交的文件或目录列表。在.gitignore文件里列出来的文件或目录,后续提交会自动被忽略掉,也就无法提交。在不改 .gitignore文件的前提下,可以给提交加一个强制提交参数-f。
检查提交失败的文件触动的忽略规则:
git check-ignore -v 文件名
找到忽略的规则,我们可修改为期望的规则,这样就修正了错误。

十七、配置别名
    配置别名可以让命令更加短小精悍,让平时操作更加方便。
git config --global alias.别名 真正的名称(如果包含空格,用引号括起来)
删除别名,可以直接操作配置文件,将[alias]后的对应别名删除即可。