## 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`, 沒有出現特殊情況下,就已經解決完沖突了