上图展示了工作区、版本库和暂存区(index)之间的关系。对工作区进行修改,然后git add进行提交时,暂存区被修改。使用git commit进行提交时,暂存区的目录树写到objects中,master分支也会做出对应的更新。
当执行git reset HEAD命令时,暂存区的目录树会被HEAD(HEAD总是指向当前的工作分支)指向的master分支的目录树所替换,但是工作区不会受到影响。
当执行git rm - -cached + filename命令时,会直接从暂存区删除文件,工作区则不会有改变。
当执行git checkout . 或者 git checkout + - -filename 命令时,会用暂存区全部或指定的filename文件替代工作区全部或者对应的文件。
当执行git checkout HEAD . 或者 git checkout HEAD + filename 命令时,会用HEAD指向的master分支中的全部或者指定的文件filename,替换暂存区以及工作区中对应的文件。
上图展示了执行几个关键命令之后代码的提交情况。
git init 初始化当前目录为Git仓库。
git init + filenema 初始化filename为Git仓库
git add + filename 告诉Git开始对filename代指的文件或文件夹进行跟踪
git commit -m + ‘备注内容’ 将缓存区中的内容提交到本地仓库(master分支),并以单引号或双引号中的内容作为注释
git status 查看仓库当前的状态,显示有变更的文件
git status -s 精简的输出仓库当前状态,精简输出仓库状态时,会用状态码来描述文件的状态。
A:表示本地新增的文件(服务器上没有)。C:文件的一个新拷贝。D:本地删除的文件(服务器上还在)。M:文件的内容或者mode被修改了。R:文件名被修改了。T:文件的类型被修改了。U:文件没有合并(需要完成合并之后才能提交)。X:位置状态
git diff 默认比较工作区和暂存区的差异
比较文件的不同时,删除的语句前面用 ’- ’ 标志,增加的地方用 ‘+’ 标志。修改某一行时,可以理解成先将原来的那一行先删除然后再增加。
git diff + commit-id 比较工作区和指定commit-id之间的差异。
git show + 版本号 该命令可以查看版本号对应的提交记录
git branch 查看本地拥有的分支
-r参数查看远程分支 -a参数查看所有分支
git branch + name 以name为名称,创建分支
创建一个分支test时。如果当前分支没有未跟踪或者需要提交的内容,那么test分支就和当前分支相同。如果当前有未跟踪的或需要提交的内容,那么之后在哪个分支下进行提交commit,内容就会保存在哪个分支下面。
git branch -d + name 删除分支name
如果删除分支时,被删除的分支没有合并则会出现警告,将-d选项改为-D选项就能强制删除分支。
假如当前有master分支和test分支,修改了文件之后,在test分支下commit提交了修改,那么在test分支下的工作区能够体现该修改,切换到master分支下时,无法体现该修改。
注意:在某个分支下作了修改之后,必须在该分支下commit之后才能切换到其它分支下工作。
git checkout + name 切换分支到name
git checkout -b + name 以nema为名称创建分支,并切换到该分支
git merge + name 将当前分支和分支name进行合并
当分支合并没有冲突时,会直接合并,且自动提交到当前分支。当分支合并出现冲突时,合并会失败。这时候就需要手动去修改合并的内容,在修改完冲突文件之后,可以通过git add + filename来告诉Git文件冲突已经解决,然后再使用git commit命令提交合并就可以了。
git log 列出历史提交记录
git log - -oneline 列出历史记录的简洁版
git log - -graph 查看历史中什么时候出现了分支、合并。
git log - -reverse 逆向显示自己想要显示的历史记录
git log - -author=name -5 只显示用户name历史记录中的前五条
显示周三之前且在2010.4.18号之后的历史记录,不含合并提交
git log - -before={3.weeks.ago} - -after={2010-04-18} - -no – merges
git log blame + filename 以列表形式显示修改记录
参数:- -decorate显示标签
git tag -a + 注解 给最新的一次提交打上标签,标签内容是注解的内容,不用加单引号
git tag -a + 注解 + 提交编号 给指定的提交编号打上标签
git tag 列出所有的标签
git rm -f + filename 该命令不管工作区和暂存区是否相同,都会将文件filename强制从暂存区和工作区中删除。
版本回退
git reset HEAD^ 回退所有内容到上一个版本
git reset HEAD^ + filename 将文件filename回退到上一版本
git reset - -hard + commit-id 该操作会彻底会退到版本commit-id,包括本地的源码
git reset - -soft + commit-Id 回退本地仓库的某一次提交,暂存区和工作区不受影响
远程仓库相关
ssh-keygen -t rsa 在本地创建sshkey
ssh -T git@github.com 验证是否和github服务器连接成功
向github推送时,github每次都会记录用户名和邮箱
git config - -global user.name ‘ ’ 设置用户名。单引号
git config - -global user.email ‘ ’ 设置邮箱。单引号
git remote 查看当前配置哪些远程仓库
git remote -v 可以看到每个别名的实际链接地址
git clone + -b + 分知名 + 远程仓库地址 克隆远程长裤的特定分支
git clone + 本地仓库路径名 克隆本地仓库
git clone + 远程URL 克隆远端服务器上的仓库
以上两个clone命令会在当前目录下创建一个名为grit的目录,且包含 .git 目录,clone下来的代码会保存所有的版本信息。如果不想使用grit文件名,可以在命令末尾添加自己想要的文件名名称。
注意:Git 的 clone 命令会为你自动将远程主机命名为 origin
git push + 远程主机名(一般为origin) + 本地分支名 + 远程分支名
如果本地分支和远程分支存在追踪关系,则本地分支名和远程分支名都可以省略
如果当前只有一个远程分支,那么远程主机名、本地分支名、远程分支名都可以省略
git fetch 从远程仓库下载新分支与数据
使用该命令将远程的分支拉取到本地分支,然后需要再使用git merge命令将其合并到当前分支中
新建本地仓库和远程仓库同步
git init 将当前文件夹初始化为git仓库
git remote add origin + 远程仓库URL 将URL指定的远程仓库和当前的本地仓库关联
git pull origin master 拉取远程仓库中的文件到本地仓库
git push -u origin master 本地仓库和远程仓库建立连接之后的第一次推送需要使用这条完整的push命令
同步代码和代合并
## 在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支;
$ git fetch origin master:temp
## 比较本地代码与刚刚从远程下载下来的代码的区别;
$ git diff temp
## 合并temp分支到本地当前工作分支;
$ git merge temp
## 如果不想保留temp分支,删除;
$ git branch -d temp
分支种类
主干分支 master
开发分支 develop
bug修理分支 bugfix
准生产分支(预发布分支) release
功能分支 feature
异常解决
warning: LF will be replaced by CRLF in
windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add时会出现以上提示。解决办法是输入 git config --global core.autocrlf false 关闭提示
repo sync + filename 同步filename下的代码
repo status 批量执行repo管理的git的git status
学习地址:
Git学习——简单易懂的教程_自由奔跑的风-CSDN博客_git学习
https://www.jianshu.com/p/ca475d64bbeb
如何用git创建本地仓库和远程仓库并实现连接



