以下是本篇git基本内容,常见问题我已经扔到了gitee:https://gitee.com/xifeng-canyang/blunch-aa/blob/master/git-learn.txt
- git
- 集中式管理和分布式管理的区分,分别对应svn和git
- git的工作流程
- git的基本操作
- 初始化配置
- 基本操作
- 分支
- 合并分支
- 解决分支冲突
- 忽略上传
- 远程仓库
- 分支的push和pull操作
- 远程仓库的别名绑定
- 协同工作流程
- 码云上面如何合并分支
- 跨团队合作
集中式管理和分布式管理的区分,分别对应svn和git
分布式版本控制所有版本信息都可以同步到每一个人,可以在本地查看所有历史版本,可以离线提交到本地仓库保存,只需要在联网
的时候push到服务器或者让其他用户拿到自己的数据,数据保存安全,但是费一点存储空间
集中式版本控制所有数据保存在服务器,协同开发者需要从服务器上更新或者上传自己的修改,看不到历史版本也
无法切换分支,由于保存在单一的服务器上,数据保存有风险,需要定期备份
git的工作流程
git是世界上最先进的分布式版本控制系统
git的基本操作
初始化配置
设置用户名
git config --global user.name 'xxx'
配置用户邮箱
git config --global user.email 'xxx'
查看配置列表
git config --list
基本操作
git init 初始化仓库
生成.git目录,.git目录存储了当前管理项目所包含的所有数据。而项目目录的内容称为“附属于该仓库的工作树”。文件的编辑再工作树中进行,并记录到仓库中,以此管理文件的历史快照。如果想将文件恢复到原先的状态,可以从仓库中调取之前的快照
git status 查看工作树当中的工作状态
vim a.txt 编辑 :wq回车退出
git rm --cached <file> 撤销暂缓存区的文件
git add <file>(文件目录+文件名) 将本地文件推送至暂存区( git add .)
git commit -m "解释" <file> 将文件推送至本地仓库
git restore <file> 可以将修改的内容进行恢复
git rm <file> 删除文件,文件删除还处于暂缓存区域
git commit -m 'xx' <file> 做一次提交之后文件将彻底删除
git restore --staged <file> 恢复删除的文件
git restore <file>/ git add/rm <file> 将文件彻底恢复
git log 查看提交的日志,(HEAD ->master)表示当前版本,':'表示还没有显示完全,按空格可以继续查看,b键网上翻,q键退出
git reflog 查看提交的日志,但是日志信息较比git log更简洁一点,经常与回退命令一起使用
git reset --hard 版本标志 切换版本,版本标志未git reflog返回的第一个值
git reset --hard HEAD^ 往后退一步,多少个^退几个版本
git reset --hard HEAD~num 往后退num步,和上面要给一样只能回退
分支
在版本控制中,使用多条线同时推进多个任务。分支可以让工作上的开发从主线上分离,避免影响主线的开发
多个功能开发,提高开发效率
一个分支出现错误可以在合并的时候解决或者废弃,不会影响主线任务
git branch -v 查看当前的分支数
git branch 分支名 创建分支
git checkout 分支名 分支的切换
git branch -d 分支名 删除分支,删除分支的时候不能处于当前分支的位置
查看当前分支处于对应的远端分之名
git rev-parse --abbrev-ref local_branch_name@{upstream}
例如: git rev-parse --abbrev-ref zl@{upstream} => origin/ts-test
如果有分支需要重新操作
git reflog 找到对应的版本位置
git reset --hard xxx
修改内容,并提交
git reset --hard xx 返回之前的那个版本
修改,并提交,但是由于remote已经修改,因此需要git pull origin 远程分支名
接着大概率出现冲突,解决冲突,然后重新add/commit进行提交
git push origin master:zl(本地分支:远程分支)
合并分支
git merge 分支名 合并分支,需要切换到其他分支(包括主分支),然后再执行合并
git rebase : https://blog.csdn.net/weixin_44966641/article/details/122561998
解决分支冲突
编辑文件,删除特殊符号
把文件修改到满意的程度再退出
git add <file>
git commit -m 'xx' 此时文件处于merging当中不能带具体的文件名,即注释后面不能加具体的文件名
忽略上传
在git init之前创建一个.gitignore文件(如果在之后创建,那么可能就需要先删除本地缓存了git rm -r --cached . 然后再重新提交)
编辑忽略文件
#xxx注释
直接写文件名
index.html
忽略文件夹
如果远程仓库的内容被修改了,那么此时我们将无法往远程分支提交内容并且提示:Updates were rejected because the remote contains work that you dohint: not have locally. 此时我们需要拉去一下分支内容:
git pull origin remote_branch(如果只是本地分支名,可以直接git pull)
但是,如果本地分支已经被合并了,那么会导致拉去失败,并且git会提示我们如何做
You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
此时我们可以选择git config pull.rebase false ,但是会有冲突,因此需要解决冲突,解决完冲突之后,便可以add/commit最后提交了
当然,也可以会退到merge分支之前,但是有局限性
如果我们在gitee上面创建了一个新的分支,此时我们从master=>切换到本地新分支,如果没啥变化,那么可以直接git pull origin remote_branch,最好是创建新分支名基于master
gitee示意图
远程仓库
托管本地仓库数据的远程服务存储,便于开发和数据的拉取和存储,便于协同开发
git remote add origin 'xxx'
git push -u origin "master"
官网方法
上传时报的错误:
- 账号和密码忘记了,如果浏览器有保存历史记录可以区“密码”中查看
-
fail to push some refs to 'xxx'
这个是因为手动修改了远程仓库中的文件(新建了仓库后创建了一个readme造成的原因),导致一些文件本地仓库和远程仓库对应不上,因此出现报错
执行(不建议用,还是走克隆好一点)
git pull --rebase origin master
将远程仓库同步到本地,然后再add commit push就行了
而我则是直接git pull -u origin master
上传错示例
分支的push和pull操作
执行 git checkout -b local_branch origin/remote_branch之前需要先git fetch,但是我貌似不需要git fetch直接就弄成功了
创建分支:git checkout -b local_branch
等同于: git branch local_branch + git checkout local_branch
**推送本地分支到远程:
git push --set-upstream origin local_branch
这样关联有一个好处,以后就不用每次git push都用第(1)种方法。
远程仓库的别名绑定
git remote add 别名 'xxx' 命名别名
git remote -v 查看别名
git remote set-url 别名 ‘xx' 设置别名
git remote rm 别名 删除别名
协同工作流程
user1克隆下来文件(git clone 'xxx')
user1修改文件
user1 add 和 commit文件,在commit的时候会要求你设置好全局的name和email
git config --global user.name 'xx'
git config --global user.email 'xx'
git add .
git commit -m 'xx'
user1推送到远程仓库
git push -u origin master
user1拉取远程仓库,可以通过clone,或者git pull origin master
(密码输入了一次之后,后续可以不用再次输入密码了)
码云上面如何合并分支
新建分支
合并分支pull Request
选择对应的分支,合并
同意
合并的时候,如果有冲突会提示出来;先暂存,再提交
跨团队合作
-
邀请对方为自己团队,避免账号泄露但是支持协同开发
image.png