* 基本概念
本地仓库:本地电脑进行本地备份
远程仓库:远程服务器进行项目托管
* Git
工作区 - ->暂存区 - ->本地库
使用:安装成功后,在需要备份的文件夹右键点击(或进入该文件夹在空白处点击)Git bash here
git底层采用的SHA-1算法(hash算法之一),可用来验证文件是否有损坏
可以使用linux命令:
查看当前路径的所有文件:ll
查看当前路径的所有隐藏文件:ls -la
查看当前的绝对路径:pwd
查看某个文件:cat [文件路径]
新建文件并编辑:vim [文件名]
- :wq 退出
- 编辑已有内容文件时要设置 :set nu 显示行数才能编辑,否则只能查看
1. 初始化本地库
git init 生成.git文件,项目具备了本地管理的能力
2. 配置个人信息
git config --global user.name “tmy” 配置用户名
git config --global user.email “aaa” 配置邮箱
- 优先级从高到低,依次如下:
git config 仓库级别:只对当前仓库有效 (数据存储在 .git/config)
git config --global 用户级别:对当前操作系统的登录用户的所有仓库有效(数据存储在 ~/.gitconfig)
git config --system 系统级别:对当前操作系统的所有用户有效
3. 基本操作
3.1 查看状态
git status 查看暂存区、工作区状态
3.2 添加文件
git add . 添加所有文件(将工作区的 新建/修改 添加到暂存区)
git add [文件名] 添加指定文件(*.vue 代表所有vue后缀)
3.3 提交版本
git commit -m “提交说明” 提交一个新的版本(将暂存区的内容提交到本地库)
git commit -m “提交说明” [文件名] 提交指定文件
git commit --amend -a 将修改的内容添加到最近的版本,不生成新的版本(版本补录)
3.4 查看历史记录
git log --oneline 查看精简版日志,hash值即索引只显示后7位(常用)
git log --pretty=oneline hash值会完整显示
git log - 5 显示最近5个版本
git reflog 会显示:HEAD@{移动到当前版本需要多少步}
说明:版本数过多,多屏显示控制方式 - - 空格向下翻页;b 向上翻页;q 退出
3.5! 前进后退
git reset [7位hash值] --hard 基于索引值操作(推荐)
git reset HEAD^ --hard 只能后退,n个^表示后退n个版本
git reset HEAD~n --hard 只能后退,表示后退n个版本
- reset命令的三个参数对比:
–soft:仅在本地库移动HEAD指针(撤销commit操作)
–mixed:在本地库移动HEAD指针,并重置暂存区
–hard:在本地库移动HEAD指针,并重置暂存区和工作区(撤销push操作【 推荐】)
3.6!强制提交并覆盖远程仓库
git push -f origin 分支名
3.7!对当前分支修改内容进行暂存
- 储存修改 git stash
- 查看存储信息 git stash list
- 恢复修改
- git stash apply 恢复后,stash中的内容未删除
- git stash drop 恢复后,stash中的内容删除【实践发现内容会被删除但并不会被恢复】
注意:没有在git 版本控制中的文件(eg. 新增文件),是不能被git stash 存起来的。
可先执行git add 再git stash
4. 分支操作
4.1 创建分支
- git branch [分支名]
4.2 查看分支和历史记录
- git branch -v
4.3 切换分支
- git checkout [分支名]
创建并切换分支 git checkout -b [分支名]
4.4 删除分支
- git branch -d [分支名]
4.5 合并分支
- 先切换到要被修改的分支上 eg.master 合并 dev
git checkout master - 再进行合并
git merge dev
4.6 重命名
- git branch –m [当前分支名] [新分支名]
5. 标签管理 - - 区分不同版本
给仓库历史中的某一个提交打上标签,以示重要
- git tag 查看已有的标签(加上-l命令可使用通配符来过滤tag eg.git tag -l “v1.2*”)
- git tag -a [版本号] -m “提交信息” 创建附注标签
- git show [版本号] 显示打标签者的信息和具体的commit信息
- git tag -a [版本号] [精简版本号] -m "提交信息 追加附注标签
- git push origin [版本号] 将tag同步到远程库
- git push origin --tags 推送本地所有tag
- git tag -d [版本号] 本地删除某个tag
- git push origin :refs/tags/[版本号] 远程删除某个tag
*Git与GitHub
团队协作(项目经理和码农)
项目经理(A)
- 先用Git创建本地库,再push到远程仓库
git remote add origin [远程仓库地址] 将本地库与远程库关联起来,并设置变量origin指代远程库
git remote -v 查看远程库地址
git push origin [远程库分支名] 将代码推送到远程库的某个分支
!(ALL)push为写操作要进行身份验证 - - 输入当前用户的github账号密码
输入一次后,账号信息存储在 控制面板 -->所有控制面板项 -->凭据管理器 的Windows凭据中,下次push不用再输入
clone、pull操作是读操作,不需要登录 - 码农push新内容到远程库后,项目经理拉取远程库内容到本地
git pull origin [远程库分支名] 拉取远程库内容到本地
(了解)pull = fetch + merge 先下载再合并
git fetch origin [远程库分支名] 抓取远程库内容下载到本地,工作区内容未更新,此处可查看更新内容进行判断是否要合并 – 先切换到远程库分支(git check out origin/dev),再查看文件内容(cat [文件路径])
git merge origin/远程库分支名 本地库当前分支合并远程库分支
码农(B)
- 先从远程库复制代码到本地,修改后再push到远程库(项目经理邀请码农并且码农接收邀请后才能push)
git clone [远程仓库地址] 把远程库的文件夹完整下载到本地;初始化本地库;创建远程地址别名origin(指代A的远程库)
邀请流程:A在"setting"中选择"Manage access",然后输入B的账号,生成邀请链接发送给B;B登录自己的github账号,在浏览器地址栏访问邀请链接,点击接受。
git push origin [远程库分支名] (输入自己的github账号密码)远程库该分支内容会更新
解决冲突
- 产生情况:如果不是基于github远程库最新版本所做的修改,不能推送,必须先拉取;拉取下来后如果有冲突,则按照“分支冲突解决”即可。
团队协作中先拉取再推送(先pull再push)
实际情景:A修改了某一行代码并成功推送到了远程库,但B不知道,B在本地修改代码提交后推送到远程库会报错,必须先从远程库拉取最新版本到本地,若他们修改的是同一行代码,则会产生冲突。
跨团队协作
第三方(C)
- 第三方登录github账号访问远程库地址(由项目经理发送),然后点击"fork",即复制完整项目到自己的远程库【C远程】
- clone远程库内容到本地,修改提交后推送到自己的远程库(操作同码农)【C本地】
- 在远程库中发起pull request(New pull request -->Create pull request)【C远程】
- 项目经理登录github账号,点击"Pull request",可看到第三方发过来的消息(两者可进行交流),点击"File changed"对第三方提交的东西进审核【A远程】
- 审核通过,回到对话界面进行合并操作(点击"Merge pull request"并输入本次操作的日志信息)【A远程】
- 最后把远程库代码拉取到本地【A本地】