当前位置:   article > 正文

git学习随笔

git学习随笔
工作区、暂存区(Stage)
  • 工作区指的是有.git隐藏目录(git版本库)的目录,也就存放文件的可见目录
  • 暂存区(一般存放在.git下的index文件中)指的是执行"git add"后文件会被放入暂存区,暂存区可以存放批量文件,在执行"git commit"后文件就会被提交到分支上
安装好git要先起个名字和邮箱
$ git config --global user.name "名字"
$ git config --global user.email "邮箱"
  • 1
  • 2
初始化一个仓库
#先创建一个目录
$ mkdir gitDir
#进入创建的目录初始化为git本地仓库
$ git init
  • 1
  • 2
  • 3
  • 4
创建一个文件将它添加到git本地仓库
#创建一个文件
$ touch index.html
#添加到暂存区
$ git add index.html
#提交到本地仓库,添加提交的message为第一次提交
$ git commit -m "第一次提交"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
将本地仓库同步到远程仓库
#使用远程git存储库源作为本地git项目的来源
$ git remote add origin git地址
#把本地内容推送至远程仓库使用"git push"就可以了,默认推送至当前分支。远程仓库为空时,第一次推送master分支时加上"-u"参数不但可以把本地仓库内容推送至master分支上,还可以把本地仓库和远程master分支关联起来,在以后推送或拉去时就可以简化命令
$ git push -u origin 分支名
#本地做了提交后就可以使用push来推送内容到远程仓库
$ git push origin 分支名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
克隆远程仓库到本地
#git支持多种协议,包括ssh,https,但是原生ssh协议速度最快,https每次都需要输入口令
$ git clone git地址
#在本地创建与远程仓库对应的分支
$ git checkout -b 本地分支名 origin/远程分支名
#建立本地分支与远程分支的关联
$ git branch --set-upstream 本地仓库名 origin/远程仓库名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
查看本地仓库有哪些文件未提交
#查看本地仓库哪些文件修改或者未提交
$ git status
  • 1
  • 2
查看对比修改内容
#查看本地与仓库的文件差异
$ git diff 文件名
  • 1
  • 2
未提交,撤销修改
#已经添加进暂存区修改:可以追加多个文件,一次性取消多个,取消以后就会恢复为未进入暂存区状态,也就无法commit到仓库(从暂存区取消,但是修改的内容还在)
$ git reset HEAD fileName
#已经添加进暂存区修改:取消当前文件夹下的添加(从暂存区取消,但是修改的内容还在)
$ git reset HEAD .
#未添加进暂存区,可以撤销为与版本库一致(丢弃工作区修改,修改内容消失,工作区删除的文件也可以恢复到版本库最新状态,但是会丢失本地修改但未提交的内容)
$ git checkout -- fileName
#未添加进暂存区,撤销当前文件夹下全部修改为与版本库一致(丢弃工作区修改,修改内容消失,工作区删除的文件也可以恢复到版本库最新状态,但是会丢失本地修改但未提交的内容)
$ git checkout -- .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
多种方式添加文件到git暂存区
#添加一个文件到暂存区,就算后边追加多个也只能把第一个添加进去
$ git add fileName
#将当前目录下未提交的文件更改添加到暂存区(新增/修改,不包含删除的)
$ git add .
#将修改的文件提交到暂存区(修改,不包含新增/删除)
$ git add -u
#添加当前目录下所有文件到暂存区(新增/修改/删除)
$ git add -A
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
多种方式提交到本地仓库
#将所有暂存区文件一次性提交
$ git commit -m "提交信息"
#提交暂存区单个文件
$ git commit fileName -m "提交单个暂存区文件信息"
#将修改的文件提交到添加并提交到本地仓库
$ git commit -am -m "添加并提交修改的文件到本地仓库"
#将一系列提交合并为一个提交
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
查看版本日志
#查看日志
$ git log
#只查看提交号和提交信息
$ git log --pretty=oneline --abbrev-comit
  • 1
  • 2
  • 3
  • 4
查看git执行历史命令日志
#会返回每次执行命令后受影响的提交号、HEAD、命令信息
$ git reflog
  • 1
  • 2
对比文件
#查看工作区与版本库里面最新版本的区别
$ git diff HEAD -- fileName
  • 1
  • 2
版本回退
#HEAD指向的是当前版本,所有在回退前进相应版本就可以使用"git reset --hard 提交号"
#版本回退到上一个版本(回退到上一个版本后就不会在日志中看到回退版本之后提交的那个版本,可以是使用git reflog查来查看执行的git命令,在命令返回信息中就可以找到对应提交号)
$ git reset --hard HEAD^
  • 1
  • 2
  • 3
分支与合并(master存放有效且稳定的代码,分支可以使不影响master分支的前提下进行修改,首次创建分支会克隆一份master分支的内容)
#创建并切换到新分支上,相当于"git branch 分支名"添加分支+"git checkout 分支名"切换分支
#git版本2.23及以上checkout可以使用switch替换
$ git checkout -b 分支名
#查看本地所有分支,参数"-r"查看远程仓库所有分支,参数"-a"查看本地和远程的所有分支,其中查看远程和查看本地及远程会显示出"->origin/HEAD",该指向为当前所在分支
$ git branch
#查看没有合并的分支(包含远程和本地)
$ git branch -a --no-merged
#查看已合并到当前分支的所有分支,包含远程和本地
$ git branch -a --merged
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
分支合并
#将某个分支合并到当前分支
$ git merge 分支名
  • 1
  • 2
删除分支
#删除本地分支(没有合并无法删除)
$ git branch -d 分支名
#删除本地分支(没有合并强制删除)
$ git branch -D 分支名
  • 1
  • 2
  • 3
  • 4
解决合并冲突
#合并冲突后使用"git status",可以查看冲突信息及文件
#终止合并
$ git merge --abort
#冲突中会出现以下信息,其中HEAD下边内容代表的是当前指向文件内容,=下面到>分支名之间的内容是>后面分支中文件的内容,然后按需求解决冲突,再"git add"+"git commit"或者"git commit -am"提交文件
#<<<<<<<<<HEAD
#内容
#=============
#内容
#>>>>>>>>>分支名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
分支管理策略
#通常git在合并的时候使用的是"Fast ForWard"模式,这种模式在删除分支后,会丢失部分分支信息
#如果强制禁用"fast forward"模式,会在合并时默认生成一个新的提交,这样就可以从分支历史看到分支信息
#在合并的的时候使用"--no-ff"命令,因为这次创建会生成一个新的提交所以加上"-m"留下信息
$ git merge --no-ff -m "使用--no-ff禁用fast forward模式合并" 分支名
  • 1
  • 2
  • 3
  • 4
bug分支
#如果出现当前版本正在修改中,突然另一个bug需要着急修改,但是完成当前修改再去修改bug时间来不及,那么可以先将现在修改内容放到stash中存储起来,然后拉去需要修改bug分支为一个新分支,修改bug后合并提交删除分支,然后再从stash中取出存储内容继续修改
#将当前修改内容存放进stash中存储
$ git stash
#查看stash存储内容
$ git stash list
#读取指定存储内容
$ git stash apply ... #...就是那个stash@{...}
#删除存储内容
$ git stash drop
#读取后删除内容
$ git stash pop
#如果当前分支修改某文件bug后在其他分支的那个文件也需要修改,就可以使用下面命令来把bug提交覆盖到需要再次修改的分支上,减少重复劳动
$ git cherry-pick 修改bug的提交号
========================
#例如修改master分支中c.sh中的一个bug
$ git stash #存储内容到stash
$ git checkout -b bugvoer #从master拉去成一个新分支bugover
$ git vim c.sh #修改bug
$ git checkout master #切换master分支
$ git merge --no-ff -m "解决c.sh文件的bug合并分支" bugover #禁用fast forward模式合并bugover分支
$ git branch -d bugover #删除临时bugover分支
$ git stash pop #读取后删除stash中存储内容
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
git标签
#标签总是和某个提交挂钩,如果这个提交出现在多个分支中,那么那几个分支上就都可以看到这个提交上的标签
#标签不是按时间顺序列出,是按照字母顺序
#标签打完默认值会在本地存储,需要单独push标签才可以推送到远程
#查看所有标签
$ git tag
#默认将标签打在最新的提交上
$ git tag 标签名
#将标签打在某一个提交上
$ git tag 标签名 提交号
#查看标签信息
$ git show 标签名
#创建带有说明的标签,"-a"代表标签名,"-m"说明信息
$ git tag -a 标签名 -m "说明信息" [提交号]
#删除标签,标签名可以追加多个以空格隔开
$ git tag -d 标签名
#将标签推送至远程仓库
$ git push origin 标签名
#一次性推送所有标签到远程仓库
$ git push origin --tags
#删除远程仓库的标签,需要先将本地标签删除,然后再按格式删除远程仓库的标签
$ git tag -d 标签名
$ git push origin :refs/tags/标签名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
忽略特殊文件
#如果某些文件在工作区,但是却不需要被版本管理,那就可以编写.gitignore文件,然后将需要忽略的文件名放进去提交到版本库就可以了,然后git就会自动忽略这些文件
#提供的可参考.gitignore文件:https://github.com/github/gitignore
#添加后如果使用"git status"没有已经配置忽略的那些文件,就说明成功
#添加一个忽略文件到git仓库中
$ git add -f 忽略文件名
#检查.gitignore文件写的规则那些出现问题,如果符合那么就会返回符合第几条规则信息及文件名,不符合就什么都不返回
$ git check-ignore -v 文件名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
图像化工具
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/672977
推荐阅读
相关标签
  

闽ICP备14008679号