Git 使用官方文档: https://git-scm.com/docGit与Github关联教程: https://www.cnblogs.com/flora...Git 远程操作详解: http://www.ruanyifeng.com/blo…推荐看看这本介绍 Git 的电子书,看完什么都知道了,介绍的很详细Git电子书下载 【PDF】 【EPUB】 【MOBI】我理解的 Git 是个什么东西Git是现在流行的VCS(“Centralized Version Control Systems” 版本控制系统)之一。版本控制系统主要目的是,控制项目不同版本,可随时回溯到任何需要的版本。如软件开发行业,版本控制系统扮演着不可或缺的重要角色。VCS可以把软件开发的各个岗位连接起来,各自完成自己的工作,且井井有条,前端和后台的工作同时进行。VCS可以把所有管理的文件都进行版本标记,如果任何文件修改出错,都可以随时恢复到前面的任何版本。说白了,VCS可以把开发人员紧密联合起来,大家同时进行开发,不会出现前后端融合错误。使用 git 每个用户都会在本地拥有 git 仓库的所有信息,过往记录,所以可以随时随地的提交代码。git 对文件版本的记录区别于其它 vcs, 其它vcs是对每个版本的文件进行标记,而 git 是对每个版本的所有文件进行快照,并根据项目内的所有文件计算出 hash 值来记录版本号。保证完整性。三种状态你的文件可能处于尺寸三种状态之一:已提交(committed)、已修改(modified)和已暂存(staged)由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以、暂存区域。基本的 Git 工作流程如下:在工作目录中修改文件。暂存文件,将文件的快照放入暂存区域。提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。安装windows 的我就不说了,需要的请自行百度。Mac 系统在安装 Xcode 的时候就会自动安装查看当前版本git –version# git version 2.17.2 (Apple Git-113)初次配置git 自带 git config 工具来修改 git 的配置文件/etc/gitconfig 系统上每一个用户及他们仓库的通用配置,带 –system 参数使用 git config 时,会读写这个文件 ~/.gitconfig 是只针对当前用户。 带 –global 参数可读写此文件当前目录是正在使用的仓库时,配置文件路径是 .git/config每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。用户信息安装完git,第一件事就是设置用户名和邮件地址,这些信息会在每次提交时使用$ git config –global user.name “John Doe”$ git config –global user.email johndoe@example.com指定git默认的文本编辑器默认的编辑器是 vim,如果你想自定义编辑器,可以通过这个指令指定:$ git config –global core.editor 编辑器名称查看配置信息git config –list 可以查看你的 git 配置信息$ git config –listuser.name=John Doeuser.email=johndoe@example.com…初始化 Git 仓库在当前目录下初始化仓库git init这个命令会将本目录初始化为一个代码仓库,并在目录中增加 .git 目录,里面是关于本仓库的所有信息。初始化之后,目录中的文件并没有加入到 git 的版本控制中,需要手动将文件添加到 git 的控制列表中,操作见下一步。$ git add .c$ git add LICENSE$ git commit -m ‘initial project versionGit 本地库的常规操作忽略特定文件在 git 管理的目录下 新建文件 .gitignore如:.[oa]~上面的文件意思是忽略所有以 .o .a 的文件,忽略以 ~ 结尾的文件.gitignore 的格式规范:空行 或 # 开头的行会被忽略可以使用标准的 glob 模式匹配以 / 开头防止递归以 / 结尾指定目录用 ! 反向选择glob shell 所使用的简化了的正则表达式 0个或任意个字符[abc] 任意其中一个字符? 匹配一个字符[0-9] 表示匹配任意中间的字符** 两个星表示任意中间目录 a/**/c a/b/c a/d/c查看当前状态git status查看当前目录下的文件状态,如果有文件未加入到跟踪中,会提示你。git status -s可以查看简短的报告git status -s M READMEMM RakefileA lib/git.rbM lib/simplegit.rb?? LICENSE.txt?? 表示未跟踪的文件A 表示新添加的文件MM 右边的M表示修改后未保存到暂存区,左边表示修改并放入了暂存区添加文件如果我们新建了一个名为 README 的文件,git status 会显示文件没有被跟踪,通过以下指令把文件添加到 git 的文件跟踪中。加入到跟踪中后,没有 commit 之前,文件处于暂存区。git add README如果这时候修改了 README 文件,再用 git status 查看状态的时候,会看到提示 changes not staged for commit,此时如果想在下次 commit 的时候提交这次修改,需要再次 git add 这个文件。git add 可以理解为标记文件到下次提交,而非只是添加文件到跟踪状态查看区别在修改了文件之后,没有添加到暂存区之前,可以用 git diff 查看前后版本的区别这是在文件没有添加到暂存区的时候的查看方式,在存入后,需要用 git diff –cached 来查看不同提交文件git commit这会打开默认的文本编辑器,让你输入此次提交的信息。就像平时用 vi 编辑文本那样,按 i 进入输入模式,然后输入你要写的话,再 esc wq 保存退出就会提交了。或者用简短的方式,直接在命令中输入此次提交的信息,多个 -m 参数会作为多个分段。git commit -m ‘初次提交’如果闲每次添加文件麻烦,可以用 -a 参数跳过添加到暂存区的操作,直接在提交的时候把所有已经跟踪的文件上传。git commit -a移除文件移除文件并取消该文件的跟踪,需要用 git rm 指令,并删除本地文件。如果只是在目录中删除了文件,在 git status 的时候会提示文件没有添加到跟踪中。如果文件已经添加到暂存区,且修改了文件还没有提交,此时删除文件就需要用 -f 参数了。只移除文件跟踪,不删除文件git rm -cached READMEgit rm 后面还可以跟 glob 模式的匹配字符串移动文件git mv 给文件重命名用这个指令其实它是三个指令的集合mv README.mb READMEgit rm README.mbgit add README所以用 git mv 会更方便一些。查看历史git log -p -2-p 显示不同版本的区别-2 显示最近的再次更新–stat 可以查看每次更新的简略信息–graph 以字符图的样子显示分支情况撤消操作有时候,在提交了之后发现有几个文件没有提交,可以用 git commit –amend。git commit -m “initial commit"git add forgotten_filegit commit –amend如果在你提交之后,在没有修改文件之前马上添加未提交的文件,再 –amend 就会打开上次提交的注释,接着编辑信息,然后再提交。Github 远程代码仓库的使用查看当前目录下的远程仓库 URLgit remotegit remote -v$ git remote -vdiary git@github.com:KyleBing/Diary.git (fetch)diary git@github.com:KyleBing/Diary.git (push)在URL前面如果显示 origin 那是 git 给 URL 仓库的默认名字,添加远程仓库git remote add tb git@github.com:KyleBing/TouchbarBBT.git这样就添加了 git@github.com:KyleBing/TouchbarBBT.git 的仓库,别名为 tb这时候拉取远程仓库内容的时候,直接用 tb 代替 git@github.com:KyleBing/TouchbarBBT.git从远程仓库拉取内容git fetch [仓库别名]这个指令会拉取远程仓库的所有内容,包括所有分支。git pull会拉取远程分支到当前分支,并自动合并。推送到远程仓库git push [仓库别名] [分支名]会将你的项目推送到远程查看远程仓库git remote show [仓库别名]在没有设置仓库别名的时候,git 会默认把这个仓库命名为 origin$ git remote show tb* remote tb Fetch URL: git@github.com:KyleBing/TouchbarBBT.git Push URL: git@github.com:KyleBing/TouchbarBBT.git HEAD branch: master Remote branch: master tracked Local ref configured for ‘git push’: master pushes to master (local out of date)给远程仓库重命名git remote rename origin tb重命名 origin 为 tbgit remote rm tb移除远程仓库 tb定义发布版本 tag查看标签git tag列出已有标签git tag -l ‘v1.8.5’只查看 v1.8.5 的相关版本v1.8.5v1.8.5-rc…创建 annotated 标签添加 annotated 标签,用 -a 参数git tag -a v1.4 -m “tag version info"git show v1.4可以查看标签和对应的提交信息创建 light-weight 标签git tag -v1.4 -lw不需要填写提交信息后期打标签查看过往提交记录,然后取一个记录的校验和的部分字符串,把该提交打成标签git log –pretty=online# 显示为86bc9a426f04817fe47c07685ac60e0fcdd33af9 (HEAD -> master, tb/master) 添加外部链接4200265a6990c78fb5d0667eb0bbb99ab2760fc0 Merge branch ‘master’ of github.com:KyleBing/TouchbarBBT6df11cb1ee1726291d8ef20da1a93773a8e40fff Last6529785f35f5f2fd6333d95430d46e6dc75c590f Update README.mdaa6a05ba99933e5505969d36f66191a499e7c2b8 文章发布前的版本7eaa5924d0b5e7675d90d9b31b8daedaacaca0ea 定稿4f2320c2dcbe5ccd9dac551817cbc90653fd377b 调整按钮尺寸大小,正在播放背景色改为黑色18dce9bf2c84183e9030d5f7e8431ca2c0504a57 Update README.mdaf58e9c024ecbe2994d0c3bb21ab112dbed008fa 更新说明文档04da2e77f336f87827e2cf5801305f075c45d7dd 添加默认 touchbar 文件,添加 最新 Touchbar 文件d797ff57fd5ff74c233c804fb627c7df04456595 Update README.mdd8a1f7ea817a0aa51ff5b2c1f075e064a9a323f7 Merge branch ‘master’ of github.com:KyleBing/TouchbarBBTf9075467294865fe1a31b0879aa2d11071fe1110 修改目录名字,添加实际照片51fde532cb2d1ef7197d14e66cdaaed46dc8be3a Create README.mdd0611a4e511641e772e56ec7c923291e254a54ad 初始化该仓库,添加基础的配置文件和基础的图标git tag -a v1.2 51fde共享标签git push 并不会把标签传送到远程仓库,显式的推送才会显示。git push origin v1.3用 –tags 会把所有不在远程服务器的标签都推送到服务器上git push origin –tags删除标签删除本地标签git tag -d v1.3检出标签git checkout 2.0Git 别名git 可以像系统那样设置别名git config –global alias.co checkoutgit config –global alias.br branchgit config –global alias.ci commitgit ci -m “infos”# 跟下面作用一样git commit -m “infos"分支如果项目中新建了三个文件,在提交的时候,Git 仓库中有五个对象:三个 blob 对象(保存着文件快照一个树对象(记录着目录结构和 blob对象索引)一个提交对象(包含着指向前述树对象的指针和所有提交信息)HEAD、 分支 master 是什么东西git 的分支,其实是指向不同提交版本的指针。在 git init 初始化的时候,默认生成了一个名为 master 的分支,其实它跟其它分支的等级是一样的,都只是一个分支,默认名为 master,只是我们都懒得给它改名罢了。git 还有一个名为 HEAD 的指针,作用是指向当前本地库正在的修改的分支,如上图,本地库正在 master 分支上做修改。创建分支git branch testing上面的指令的结果如上图,在当前版本上新建了一个名为 testing 的分支。git branch 只是创建一个分支,并不会切换到该分支。分支切换git checkout testing上述操作会把 HEAD 指针指向 testing 分支,作用如下图:当前在 testing 分支上,现在新建并提交一个文件,只会保存在 testing 分支上,而 master 分支还停留在前一个提交状态上,也就是说该文件只存在于 testing 分支上。效果如下图;master 没有动,testing 已经向前移动到了最新的节点。切换分支的时候会改变本地的目录结构切换分支的时候,本地文件会变到当前分支的目录结构上,如果由于特殊原因没法切换分支的时候,会提示切换分支失败。此时我们再切换回 master 分支并做修改后提交,master 指针就会指向新的提交节点。此时,master testing 分别处于不同的提交节点上,如下图: