Git概念和知识
Git的四个工作区域和工作流程
Git 的四个工作区域
- Remote:远程仓库
位于托管代码的服务器,远程仓库的内容能够被分布在多个地点的处于协作关系的本地仓库修改。比起本地仓库,远程仓库通常旧一些,因此本地仓库修改完之后需要同步到远程仓库。 - Repository:本地仓库
位于自己的机器,本地仓库保存了被提交过的各个版本,比起工作区和暂存区的内容,它更旧一些。
首先是 git commit 同步 index 的目录树到本地仓库,然后通过 git push 同步本地仓库到远程仓库。 - index:暂存区
位于.git目录下的index文件,暂存区会记录 git add 添加文件的相关信息(文件名、大小),不保存文件实体,通过 id 指向每个文件的实体。
使用 git status 可以查看暂存区的状态,暂存区标记了当前工作区中那些内容是被 git 管理的,当完成某个需求或者功能后需要提交代码,第一步就是通过 git add 先提交到暂存区。 - workspace:工作区
即进行开发改动的地方,是当前看到的,内容也是最新的,平常开发就是拷贝远程仓库中的分支,基于该分支进行开发,在开发的过程就是在工作区的操作。
Git 的工作流程
- 在工作区添加、修改文件
- 将修改后的文件放入暂存区域
- 将暂存区域的文件提交到本地仓库
- 将本地仓库的修改推送到远程仓库
git文件状态
常用操作
-
新建本地分支
git checkout -b branchName
注意: branchName是分支名,你可以修改成你分支名 -
新建远程分支+绑定
git push --set-upstream origin 本地分支
会新建一个和本地分支名相同的远程分支,并且绑定 -
新建远程分支
- 新建远程分支
git push origin originBranchName
注意: originBranchName是远程分支名,尽量和本地分支名一样 - 删除远程分支
git push origin -d originBranchName
- 新建远程分支
-
绑定本地分支和远程分支
git branch --set-upstream-to=origin/originBranchName branchName
git pull
-
用远程分支代码强制覆盖本地
git fetch --all # 从远程获取最新版本到本地,不会merge git reset --hard origin/master # --hard origin/<master> master指定远程的分支为master git pull # 从远处获取最新版本并merge到本地
-
本地分支强推到远程分支
git push origin 远端分支名 --force
-
代码还原到指定提交记录
#查看历史提交记录,获取对应commit head
git log
# 回退到当前版本(取消暂存区的内容)
git reset HEAD
进阶操作
单个本地库绑定多远程仓库
应用场景:比如开源项目在gitee、github都有对应仓库,本地代码变更,同时推送到gitee、github上面,这里就需要单个本地库绑定多个远程仓库
方案
-
将命令行切换到对应项目目录,比如项目名 demo
cd /demo
-
添加远程仓库
git remote add 远程仓库tag 远程仓库url
注意: 我们常用origin实际是远程仓库默认tag,本地仓库关联多个远程仓库时候需要自定义tag,这样提交等操作的时候,才可以区分出来,例如: git push origin/master git push upstream/master,就是分别提交到不同远程仓库主分支里面
git remote add upstream url
-
查询远程仓库关联情况
git remote -v
-
提交自己本地分支未提交代码,通过git stutas git add git commit git push或者图形界面工具,将未提交的代码提交到origin/master
-
git fetch upstream/master
-
git checkout master
-
git merge upstream/master
注意:这里可能会报错fatal: refusing to merge unrelated histories, 意思不同分支,有不同的历史,没法合并,解决方案是加参数-allow-unrelated-histories,git merge upstream/master -allow-unrelated-histories