-
git工作流: https://blog.csdn.net/zyw0713/article/details/80083431
-
Git区域关系
远程仓库/remote--------本地仓库Repository-------staged暂存区/index----unstage工作区/workspace
远程仓库/remote--------commited/Repository-------stage/index----unstage/workspace
远程仓库/remote--------本地仓库Repository-------staged/暂存区----unstage/工作区 -
GIt工作流
-
Git提交版本关系图-每一个commit下面指向一颗树tree
Git配置
#设置邮箱、用户名:
git config --global user.name 'wangzj'
git config --global user.email '123@qq.com' 在根目录home下.gitconfig文件中全局配置所有用户
git config --local user.name 'wangzj'
git config --local user.email '123@qq.com' 在.git/config中配置-给当前项目配置
git config --system user.name 'wangzj'
git config --system user.email '123@qq.com' 在cd ~ 目录下.gitconfig文件中配置-给当前用户配置
#清除配置-打开文件删除
git config --local --unset user.name
#忽略文件配置-创建 .gitignore 文本
#忽略所有后缀为xml的文件
*.xml
#除了web.xml,这个文件需要git管理
!web.xml
test/ 忽略test目录中的所有文件
test/*.class 忽略所有class文件
test/*/*.txt 只能忽略 test/a/1.txt;不能忽略test/a/b/2.txt
test/**/*.txt 不管有几级目录都可以-任意级别目录
空目录 默认就是忽略的
基本操作
- git init 初始化git库,必须在空文件夹下
find .git/objects/ -type f 列出目录下所有的文件
- git remote add origin http://..../cpas.git 关联远程仓库
- git remote set-url origin http://..../newCpas.git 修改关联的远程仓库地址
- git clone http://..../caps.git 从远程克隆到本地
- git add a.txt 工作区提交到暂存区
- git add *.txt 通配符
- git status 查看文件状态
- git commit -m"提交描述"
- git commit --amend -m "修正" 修改上一次提交的描述信息
- git rm --cached a.txt 从暂存区还原到工作区,还原到上次add的状态-新加的文件
- git reset HEAD a.txt 同上-从暂存区还原到工作区,无论新旧文件
- git checkout -- a.txt 将工作区改的文件回滚-从本地仓库中下拉覆盖-还原到已提交commit状态
注意:如果已经修改add到暂存区,再执行checkout回滚是没有效果的,
#重命名文件------start-------
1, git mv a.txt aa.txt 进入暂存区:其实是拷贝了一个新文件,删除旧文件,恢复之后就是2个文件了
后悔:1, git reset HEAD a.txt 从暂存区还原到工作区,但是为删除状态
2, git checkout -- a.txt 取消删除状态-重命名的文件还在成了新文件了
2,操作系统的重命名
都在工作区:一个是删除状态,一个是新文件状态
git add 再 git commit -m "rename" 就行了
#重命名文件------end-------
#删除文件操作-----start-----
1, git rm a.txt 将文件从库里删除,删除之后会被放在暂存区, 删除->暂存区
彻底删除: git commit -m '彻底删除a.txt'
git rm a.txt
后悔:1, git reset HEAD a.txt 从暂存区恢复到工作区
2, git checkout -- a.txt 取消删除操作
2,操作系统删除: 直接在文件夹里删除,还在工作区
彻底删除: 先git add 再git commit -m '彻底删除'
#删除文件操作-----end-----
- git tag -a version -m "标签"
- sha1 a.txt //求hash值
- git hash-object a.txt 计算hash值
- git show fc32f //显示blob文件内容
- git ls-tree 0568 //查看tree对象内容
- git show -s --pretty=raw 2346 //查看commit对象内容
- cat .git/refs/heads/master //查看master指向那个commit对象
- find .git/objects/ -type f //查看所有的提交的对象
- find .git/objects/ -type f | wc -l //统计所有的提交的对象个数
- git cat-file -t cd34sdssdww //查看对象类型: commit tree blob
- git blame a.txt //查看文件每行修改记录--可以追责
- git diff :暂存区 和 工作区的差异
- git diff 57d8 对象区(库里) 和 工作区的差异
- git diff head 最新一次提交对象区(库里) 和 工作区的差异
- git diff -cached 57d8 对象区和暂存区的差异
-
Git分支
git branch 查看所属分支
git branch dev 创建新分支dev
git branch -m master master2 修改分支名称
#存在未合并内容的分支不能删除,不能删除当前分支
git branch -d dev 删除分支-自己不能删除自己,切换到其他分支执行强制删除dev分支-使用大写D
git branch -D dev
git checkout dev 切换到dev分支上
git checkout 602459 动态切换到指定提交点-游离状态-修改必须提交并且建立新分支
git merge dev 合并分支(必须先切换到master主支上再执行)
git merge --no-ff dev 保留所有提交信息
git log --graph 查看分支合并信息git push + 服务器库名 + 主支名 将本地库的变更提交到服务器的主支上
git push origin master
#Git创建Develop分支的命令,并切换到新分支develop上
git checkout -b develop mastergit branch -v 查看每个分支最近一次提交的记录-hash值及描述
#每个分支记录的commit值在 .git\refs\heads\下的文件内
查看日志
- git log --name-only commitid 查看某一次提交修改的文件列表
- git log --pretty=oneline 查看提交记录及描述
- git log -3 查看最近3次的提交
- git log --graph 查看分支合并信息
- git log --graph --pretty=oneline --abbrev-commit 图形显示分支及描述
- git reflog 记录每一次提交
- git reflog 记录每一次提交
437c42f HEAD@{0}: commit: two
8421e9e HEAD@{1}: commit (initial): 'one'
- git log --pretty=format: "%h - %an , %ar : %s" 查看提交记录/作者及描述
- git log --pretty=oneline 查看提交记录及描述
8421e9eedbc6e7d3a7d179c6455cfa7acd6170ac 'one'
- git log --pretty=format:"%h - %an , %ar : %s" 查看提交记录/作者及描述
8421e9e - zhi_jun_wang1 , 82 seconds ago : 'one'
- git show --name-only commitid 查看某一次提交修改的文件列表
- git show fc94fse 查看树文件内容
- git blame filename 追查文件每一行是谁改动过
- git clean -d -fx "" 其中x删除忽略文件已经对git来说不识别的文件,d删除未被添加到git的路径中的文件,f-强制运行
#Tag 是针对整个项目-与分支没有关系
- git tag V1.0 打标记
- git tag -a v1.0 -m "This is the stable version" //重量级的标签, 占用对象
- git tag -d v1.0 删除标签
- git tag -l 'V2*' 模糊查询标签
- git archive --format=tar --prefix=ruby/ v1.0 |gzip >/tmp/ruby1.0.tar.gz
-
-
暂存操作-保存现场
#如果还没有开发完毕,就要切换分支:保存现场stash再切换分支
git stash 保存现场
git stash save mystash 保存现场命名为mystash- git stash list 贮藏记录列表
- git stash drop stash@{0} 删除贮藏记录
- git stash pop 恢复现场-最近一次-将原先保存的删除
- git stash apply 恢复现场-不删除原保存的内容
- git stash clear 清空所有贮藏
- git stash apply name 恢复指定贮藏
- git stash apply stash@{3} 恢复指定贮藏
- git stash save -a “message” 新文件也能加入贮藏区中
-
Git版本回退
git log
git reset --hard HEAD^^ 回退到上2次版本
git reset --hard HEAD~n 回退到前n次版本
git reset --hard 803c3 回退到指定的版本,通过hash值
git reflog 查看所有提交记录,以便再次跳转到指定版本
git checkout dev 切换到dev分支上
git checkout 602459 动态切换到指定提交点-游离状态-修改必须提交并且建立新分支 -
Git远程操作
git remote add origin https://github.com/wngzj/git2022.git
git push -u origin master 第一次push加参数
git remote shwo origin 查看远程地址
git remote add origin git@github.com/wngzj/git2022.git 使用ssh协议-可以免密登录
#ssh 免密push 本地-私钥; 远程github存放公钥
#可以将公钥存在在github中俩个地方:项目的setting中,只有当前项目和本级免密登录–勾选可写权限
#账户的setting中,账户的所有项目都可以和本机免密登录
ssh-keygen 生成公钥及私钥