(没有用过git命令的请先看本地操作,老司机请移步至需要的标题下)
在实际工作中,我们会遇到很多无法预料的问题:
问题一:频繁改需求。例:
项目开发好以后,形成版本v1.0
需求改变:
在v1.0的基础上添加功能A,形成版本v1.1 - 在上个版本的基础上添加功能A
在v1.0的基础上添加功能B,形成版本v1.2 - 在上个版本的基础上删除功能A,添加功能B
在v1.1的基础上添加功能C,形成版本v1.3 - 在上个版本的基础上删除功能B,添加功能A,再添加功能C
在v1.2的基础上添加功能D,形成版本v1.4 - 上个版本的基础上删除功能A,删除功能C,添加功能B,添加功能D
git可以完美解决这个删除添加的过程。因为git可以将每个版本保存下来,可以很轻松的将当前版本切换到之前的某个版本。
问题二:一不小心将文件删除了,还需要重新写。
使用git的话,如果将某个文件删除,形成新的版本,也可以很轻松的切换到之前的版本,将删除的文件找回来。
问题三:在当前电脑开发好的内容,换了一台电脑,发现代码还需要重新写
使用git的话,将每次写好的代码,上传到github网站,只要有网就能下载,相当于备份
问题四:工作中每个人写好的文件最后需要合并到一个大文件中,需要很繁琐的复制粘贴
使用git可以很轻松的进行文件合并
本地使用git 及其基本命令
基本命令:
清屏: clear
新建并打开文件: vi 文件名 按a 可插入,可编辑文件,
保存,按ESC :wq
eg: vi 6.txt
新建文件:touch 文件名 eg: touch test.js
新建文件夹: mkdir 文件夹名
git 步骤:
1.在一个空文件夹里右键选择: Git Bash Here 出现命令框
2.初始化生成一个隐藏文件夹: git init
初始化后,会出现一个隐藏的文件夹
.git
,此时代表当前这个文件夹及其以下内容都被git管理了
3.查看当前仓库状态: git status
隐藏文件夹同级目录下建立新的文件,工作区代码红色
4.添加工作区文件到暂存区: git add 1.txt
存放单个文件:
git add 文件名称
git add 文件夹名称
存放所有文件:
git add --all
git add .
将暂存区的代码拖出工作区: git reset HEAD -- .
拖出单个文件:git reset HEAD -- 文件名
拖出单个文件夹:git reset HEAD -- 文件夹名
拖出所有文件:git reset HEAD -- .
5.将暂存区的代码放到历史区: git commit -m "新建的1"
git commit -m "版本描述"
添加多个文件
6.查看所有的版本信息:git log
有的git在提交的时候需要输入自己的邮箱和名字 - 需要执行两行命令
git config --global user.name '名字'
git config --global user.email '邮箱'
可以随便给
回到以前版本:git reset --hard HEAD^
有几个上档键就回退几个版本: git reset --hard HEAD^
查看有哪些版本: git log
回到指定版本 : git reset --hard 版本号
.git隐藏文件夹里面的 logs/HEAD 文件中找版本号
git不能管理空文件夹,git提供了一个文件,专门用来占位,需要在编辑器里新建文件:.gitkeep
git在管理仓库中文件的时候,会忽略在.git文件夹所在目录创建一个文件:.gitignore 文件里直接写路径
远程仓库
码云 gitee 操作
登录码云 新建一个仓库
是否需要初始化:
没有东西,建一个仓库放东西,请初始化仓库
自己写了很多文件及文件夹,可选不初始化仓库
初始过化的仓库
- 复制仓库地址:
在新文件夹里,鼠标右击选择 Git Bash Here
将初始化过的远程仓库克隆下来: git clone 复制的地址
可直接重命名git clone 复制的地址 新的名字
- 进入从线上克隆下来的文件夹:
cd ants
此时远程仓库与本地仓库已经联立
使用上传文件:git push
- 对本地仓库里东西进行修改之后:
查看状态:git status
将所有改变的文件放入暂存区: git add .
文件放入历史区,形成版本:git commit -m "测试"
提交文件: git push
完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
没有初始过化的仓库
1.在文件夹里,鼠标右击选择 Git Bash Here
Git 全局设置:
git config --global user.name "用户名"
git config --global user.email "邮箱"
2.创建 git 仓库: 已有文件直接在文件中进行文件夹初始化
创建文件夹作为仓库(chicken为我自定义的名字): mkdir chicken
进入文件夹: cd chicken
文件夹初始化(变为本地仓库): git init
创建文件(作为例子,可省略): touch README.md
文件放入暂存区: git add README.md
提交文件: git commit -m "first commit"
请求远程地址: git remote add origin 仓库地址
推送内容到远程仓库的master分支: git push -u origin master
会弹出
输入账号密码
账号可从 gitee 中头像 ====> 设置 ====> 多邮箱管理 ====> 主邮箱
密码为邮箱密码
此时账号密码可能出错,如果没有用过 gitee 的不会出现此问题
解决方法:
找到控制面板 ====> 用户账户====> 凭据管理器 ====> Windows凭据 ====> 删除gitee存的账号密码
完成!!!!!!!!!!!!!!!!!!!!
新的电脑或新文件夹需要拉取仓库文件
1.在新文件夹里,鼠标右击选择 Git Bash Here
将远程仓库克隆下来: git clone 远程地址
- 对仓库里东西进行修改之后:
进入文件夹 : cd chicken
进入仓库代码最后会有 (master) 的标志
查看仓库状态: git status
将所有改变的文件放入暂存区: git add .
文件放入历史区,形成版本: git commit -m "测试"
提交文件: git push
会弹出
输入账号密码
账号可从 gitee 中头像 ====> 设置 ====> 多邮箱管理 ====> 主邮箱
密码为邮箱密码
此时账号密码可能出错,如果没有用过 gitee 的不会出现此问题
解决方法:
找到控制面板 ====> 用户账户====> 凭据管理器 ====> Windows凭据 ====> 删除gitee存的账号密码
完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
创建仓库的电脑拉取操作仓库文件
此时创建仓库的电脑(下面称为小A电脑)有两个版本,且提交了两个版本
新电脑(克隆内容的电脑或文件夹,下面称为小B电脑)有一个版本,且提交了一个版本
远程仓库为三个版本
小A电脑的仓库与远程仓库不同步,需要同步
在小A电脑仓库里(即 拥有 .git 的文件夹里)
鼠标右击选择 Git Bash Here
拉取仓库内容: git pull
修改仓库内容后
将所有改变的文件放入暂存区: git add .
文件放入历史区,形成版本: git commit -m "版本号"
提交文件: git push
GitHub 操作
登录GitHub 新建一个仓库
初始过化的仓库
- 复制仓库地址:
在新文件夹里,鼠标右击选择 Git Bash Here
将初始化过的远程仓库克隆下来: git clone 复制的地址
可直接重命名git clone 复制的地址 新的名字
- 进入从线上克隆下来的文件夹:
cd butterfly
进入仓库标志最后面有(main)
此时远程仓库与本地仓库已经联立
使用上传文件:git push
会弹出
输入账号密码
账号可从 GitHub 中头像 ====> Setting ====> emails ====> Primary email address ====> save
密码为邮箱密码
此时账号密码可能出错,如果没有用过 gitee 的不会出现此问题
解决方法:
找到控制面板 ====> 用户账户====> 凭据管理器 ====> Windows凭据 ====> 删除gitee存的账号密码
结果
完成!!!!!!!!!!!!!!!!!!!!
- 对本地仓库里东西进行修改之后:
查看状态:git status
将所有改变的文件放入暂存区: git add .
文件放入历史区,形成版本:git commit -m "测试"
提交文件: git push
完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
没有初始过化的仓库
1.在新文件夹里,鼠标右击选择 Git Bash Here
2.创建 git 仓库:已有文件直接在文件中进行文件夹初始化
创建文件夹作为仓库(chicken为我自定义的名字): mkdir chicken
进入文件夹: cd chicken
文件夹初始化(变为本地仓库): git init
创建文件(例子,可省略): touch README.md
文件放入暂存区: git add README.md
提交文件: git commit -m "first commit"
推送至 main 分支: git branch -M main
请求远程地址: git remote add origin 仓库地址
推送内容到远程仓库的master分支: git push -u origin main
会弹出
输入账号密码
账号可从 gitee 中头像 ====> 设置 ====> 多邮箱管理 ====> 主邮箱
密码为邮箱密码
此时账号密码可能出错,如果没有用过 gitee 的不会出现此问题
解决方法:
找到控制面板 ====> 用户账户====> 凭据管理器 ====> Windows凭据 ====> 删除gitee存的账号密码
完成!!!!!!!!!!!!!!!!!!!!
新的电脑或新文件夹需要拉取仓库文件
1.在新文件夹里,鼠标右击选择 Git Bash Here
将远程仓库克隆下来: git clone 远程地址
- 对仓库里东西进行修改之后:
进入文件夹 : cd chicken
进入仓库代码最后会有 (master) 的标志
查看仓库状态: git status
将所有改变的文件放入暂存区: git add .
文件放入历史区,形成版本: git commit -m "测试"
提交文件: git push
完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
创建仓库的电脑拉取操作仓库文件
此时创建仓库的电脑(下面称为小A电脑)有两个版本,且提交了两个版本
新电脑(克隆内容的电脑或文件夹,下面称为小B电脑)有一个版本,且提交了一个版本
远程仓库为三个版本
小A电脑的仓库与远程仓库不同步,需要同步
在小A电脑仓库里(即 拥有 .git 的文件夹里)
鼠标右击选择 Git Bash Here
拉取仓库内容: git pull
修改仓库内容后
将所有改变的文件放入暂存区: git add .
文件放入历史区,形成版本: git commit -m "版本号"
提交文件: git push
操作分支
1.查看有所有分支: git branch
2.创建分支: git branch 分支名
3.切换分支: git checkout 分支名
(master) 变为(ants_1)切换成功
4.创建并切换分支: git checkout -b 分支名
5.合并分支:把写的分支内容复制到主分支,主分支增加,原来分支不变: git merge 分支名
6.删除分支:一般不删master分支,在分支下不能删自己,即在有(ants_1)的文件中不能删ants_1分支,可以在(master)下删ants_1分支
删除本地已合并的分支: git branch -d [branchname] 某些情况下可以用 git branch -D [branchName] (使用时应注意是否已合并), 提示删除了一个名为list的本地分支
删除远程分支: git push origin --delete [branchname]
提示删除了一个名为 201804019-test-files 的分支,
注意: 在删除远程分支时,同名的本地分支并不会被删除,所以还需要单独删除本地同名分支
7.上传文件到分支: git push --set-upstream origin source
版本操作
1.查看版本:git log
2.查看文件: ls
3.本地文件同步: git pull
地址 分支名
弹出一个编辑文件页面,不用编辑 使用:wq
保存并退出
本地文件夹就同步了
- 对仓库里东西进行修改之后:
将所有改变的文件放入暂存区: git add .
创建其他分支提交文件(只用第一次提交): git push --set-upstream origin 顾成才
5.删除无用文件夹:rm -rf project/
查看仓库内所有文件夹及文件:ls
冲突
两个人同时操作同一个分支,提交的时候会有先后顺序,先提交的人正常提交了,后一个人提交的时候会产生冲突。因为git规定,每次提交必须是在原来的版本基础上,但是第二个人在提交的时候,在远程已经有了第二个版本,所以第二个人相当于从第一个版本向第三个版本提交。
冲突解决:
- 使用命令让本地和远程同步:
git pull
然后手动解决文件冲突
- 开辟新的分支,然后进行分支合并
git fetch origin master:tmp # 使用 fetch 获取远程最新信息并开辟一个临时分支
git diff tmp # 将当前分支和远程分支进行对比
git merge tmp # 将临时分支合并到当前分支
添加本地已有文件到仓库
- 远程不管有什么,我现在就想把我的一个文件夹里的东西放到远程的分支,该咋办呢???**
首先本地已有的文件不可以合并到任何一个分支, 哪怕代码是一模一样的,
只能把本地分支作为新分支传到仓库里
1.建立本地仓库
查看当前项目根目录中有没有 .git文件(隐藏文件),如果没有,右键 => Git bash here ,然后输入命令git init建立本地仓库,
如果有的话,删掉,一切从头开始,没得商量
git init
2.将代码提交到本地仓库
git add .
git commit -m "new branch commit"
3.在本地仓库中建立一个与远程仓库的别名,以便之后提交代码而不是每次都要输入远程仓库地址。指令结尾是git的仓库地址
git remote add origin git@XX.XX.XX.12:gyjia/hotcodeserver.git
4.注意: 这里要把本地的代码提交的远程仓库上了,步骤如下
- 首先要建立本地的分支,并切换到该分支上(本地建立完分支,默认是在master分支上)
git branch new_branch
git checkout new_branch
- push到远程仓库上面
git push origin new_branch
到你的远程仓库看一哈子,这是不是你想要的样子 !@!@!
如果本地当前是在new_branch分支上面,此时想把远程仓库的master与我的new_branch分支合并(merge),可以使用如下命令:
git pull origin new_branch:master
补充: 如果线上分支已经提交多版, 本地分支未与线上分支同步
用上述合并代码出现无新代码或者报错使用以下代码 允许之前的历史记录合并到新分支
git pull origin master --allow-unrelated-histories
再加
会自动克隆该分支在本地,克隆后本地只有这一个分支。
// 克隆下来的仓库名默认为远程仓库名
git clone -b <指定分支名> <远程仓库地址>
git clone -b antd组件库 https://gitee.com/wozuisuai.git
// 可以直接以组件库名字命名克隆下来的仓库
git clone -b <指定分支名> <远程仓库地址> <指定分支名>
git clone -b antd组件库 https://gitee.com/wozuisuai.git antd组件库