## git基本操作
如果不是在同一个仓库下就使用git 需要初始化 git init
## git clone
> 直接拉取远程仓库地址的代码到本地
> git clone (https ssh)
## git add
> 提交代码到暂存区里
> git add .
## git status
> 查看当前项目的文件状态
> git status
## git commit
> 提交代码到本地记录
> git commit -m 'xxxx这次改动过的信息提示'
> 提交完成后,如果没有出现**error** 或者是**fatal**
## git push
> 提交本地记录到远程仓库
> git push origin 具体的分支名称
## git remote
> git remote -v 查看远程仓库
> git remote add origin(远程仓库地址的别名) [git@xxxx.com](mailto:git@xxxx.com)(具体的远程仓库地址) :添加新的仓库
> git remote remove origin: 移除别名叫origin的远程仓库
## git pull
> 更新并合并对应分支的代码
> git fetch (更新远程仓库的信息)
> git merge (合并操作)
> 在master分支上,合并后面提交的master的代码 git merge master(分支名称)
> git pull origin master(分支名称)
## 本地项目(不受git管理的项目)同步远程项目仓库
> 1. 本地项目git初始化 `git init .` , 可以使用git的命令
> 2. 本地项目执行`git status`查看文件状态,
> 3. `git add .` 把改动的文件都提交到暂存区里面去
> 4. `git commit -m 'xxx'`创建一个本地提交记录(文件改动提交到本地)
> 5. `git push origin master` 出现错误, origin不知道哪个远程仓库
> 6. `git remote -v` 查看远程仓库地址, 发现没有
> 7. `git remote add origin` 具体ssh地址或者https地址
> 8. `git push origin master` 出现错误 **... git pull ....**
> 9. `git pull origin master` 出现错误 fatal: refusing to merge unrelated histories
> 10. `git pull origin master --allow-unrelated-histories` 强制更新代码
> 11. 同步本地的提交记录到远程仓库 `git push origin master`
## 分支(先clone,创建分支,删除文件夹,创建文件夹)
> master就是分支,生产环境的分支(可以发布到线上)
> develop或者是dev, 开发环境总的分支
> 切换并创建一个不存在的分支:`git checkout -b 02` 02分支不存在,所以要加上-b, b: branch
> 切换分支: `git checkout 已经存在的分支名称`
已经存在一个远程仓库, 并且本地的需要提交的代码结构比较简单的情况,
> 1. git clone 远程仓库
> 2. 克隆下来的仓库分支(master), 切换分支,不存在的分支要创建git checkout -b 分支名称; 如果分支存在, git checkout 已存在分支名称
> 3. 把需要提交的文件复制到这个克隆下来的仓库里面
> 4. git status 查看文件状态
> 5. git add . 提交到本地的暂存区
> 6. git commit -m 'xxx' 创建一个本地提交记录
> 7. git push origin 分支名称
## git fetch
> 本地更新远程分支信息 查看所有分支(包含远程分支信息) `git branch -a`
## git pull
> git pull 更新代码: git pull origin 分支名称
> git pull合并代码: **建议不使用这种**
> 合并代码的情况:
> 现在在a分支, `git pull origin b`, 相当于在a分支更新b分支的代码下来,这样的操作就是合并操作, `a 分支合并b 分支代码`
## 合并分支
> 1. git pull origin 分支名称, 会扰乱我们的提交记录,不建议用这种
> 2. git merge 分支名称 ,它的作用就是合并代码, 如果想在master分支合并weizhiwei, `git checkout master` , `git merge weizhiwei`
> 3. `git rebase 分支名称` , 如果你在**master**分支上, 想合并\*\*weizhiwei`**分支的代码,建议先切换到weizhiwei分支`git checkout \*\*weizhiwei`**,在**weizhiwei**分支基础上执行`git rebase master, 执行完rebase合并操作以后(有时候会有冲突, ...), weizhiwei的分支上是不是已经拥有了master分支最新的代码, git checkout master ,切换回master分支, 执行 `git merge weizhiwei`, 更新到远程分支就执行`git push origin master`
补充: 生成ssh-key命令: `ssh-keygen -t rsa -C "公司使用的邮箱"` ,ssh-key 保存的的文件`id_rsa.pub`
> 情况一: 本地 是没有这个远程仓库项目的, 从远程仓库下载项目代码下来`git clone ssh(https)` , 默认情况是在`master` 分支;你现在的项目代码是最新的了,并且是拥有远程仓库里面所有的分支信息. 这个时候是不需要执行`git fetch` `git pull`
> 情况二: 本地已经拥有了仓库, 在当前仓库下要更新别的同事的代码下来,如果你的分支和你的同事的分支是一样的, `git pull origin 分支名称`; 不一样的分支, 相当于合并别的分支代码到自己的分支代码上, `git rebase 同事的分支`, 有冲突解决冲突;一个宗旨: **把冲突放到自己的开发分支上面解决就好了**;
> 情况三: 本地已经拥有了仓库, 但是是一个月前的代码, 你本地看不到你同事的分支(git branch -a 看到的分支信息是一个月前的分支信息), 前几天你的同事创建了一个新分支并且写好代码提交到远程仓库(gitlab gitee), 然后叫你继续在他的基础上写代码, 那现在要怎么做? 1. `git fetch`同步(更新)远程仓库最新的分支信息, (通过git branch -a可以看到最新的分支信息); git checkout 同事的分支, 同时执行一下 `git pull origin 同事分支`
> 情况四: 本地已经拥有了仓库, 但是是一个月前的代码,前几天你的同事在它自己的分支写好代码提交到远程仓库(gitlab gitee), 你要在当前你自己的开发分支基础上,合并同事最新的分支代码. git branch -a查看一下远程分支有没有同事的分支, `git checkout 同事的分支` 更新同事分支上最新的代码 `git pull origin 同事分支`, 接下来要合并同事的代码到自己的分支上, `git checkout 自己的分支` , `git merge 同事的分支 || git rebase 同事的分支`
## 冲突(合并代码)
> git merge : 出现冲突,
> 1. 找到冲突的文件(CONFLIIT), 解决里面的冲突
> 2. `git add .` 和 `git commit -m 'xxxxx'`
> git rebase : 出现冲突
> 3. 找到冲突的文件(CONFLIIT), 解决里面的冲突
> 4. `git add .` , 执行`git rebase --continue`, 没有出现特殊情况下,就已经解决完冲突了