熟练掌握git用法

以下是本篇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操作

image.png

执行 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

选择对应的分支,合并
同意
image.png

合并的时候,如果有冲突会提示出来;先暂存,再提交
冲突

跨团队合作

  • 邀请对方为自己团队,避免账号泄露但是支持协同开发


    image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容