---
# System prepended metadata

title: Git 常用指令與操作
tags: [Git, Gitlab]

---

# Git 常用指令與操作

**禁止使用** `如果要使用請告知目前使用版本的人員`
```
master: git push -f origin master
```

>如果当前分支是 protecded 的受保护分支，则 git 服务器会拒绝强制推送此时，需要将当前分支的 Protected 属性暂时去掉。可以进入当前仓库的设置中的 "Protected branches" 一项，将当前 branch 的 protected 临时去掉，等这次 push 完成，再重新设置回 protected 




**在終端機輸入 安裝git**

```
sudo apt-get install git
sudo apt-get upgrade 
```
**上傳專案**

```
git add .
git commit -m 'v1.0.0'
git push
```



**送入多個遠端git**
1. 檢查當前路徑
> (push) 被推送的遠端
> (fetch) 可供拉回的遠端
```
git remote -v
> origin git@github.com:Test/Test.git (fetch)  
> origin git@github.com:Test/Test.git (push)  
```

2. 新增一個origin路徑
```
git remote set-url origin --push --add <遠端路徑>  
```

3. 檢查路徑是否新增成功
```
git remote -v
> origin git@github.com:Test/Test.git (fetch)  
> origin git@github.com:Test/Test.git (push)  
> origin git@bitbucket.org:Test/Test.git (push)  
```
這樣就新增成功可以一次push兩個遠端git了



**創建 Branches**
> gitlab上member拉人後, 創建 Branches 出來 ex: demoname
>
> 在本機端輸入以下查看本地分支
``` 
git branch
```

> 應該只會看到 *master
>
> 輸入以下拉取遠程branch, 並在本地創建分支和遠程的分支的匹配
```
git fetch origin demoname:demoname
git fetch origin develop:develop
```

> 開發時候都是使自己的分支開發 
```
git checkout demoname 
```



**合併時候**

> 切換到 develop分支

```
git checkout develop
git pull
git merge demoname
git push
```



不要累積大量代碼, 完成功能後就提交

> 以下為工作流程 工作分支：demoname, 主分支：master

1. 去自己的工作分支

   ```
   git checkout demoname
   ```

2. 工作

3. 提交工作分支的修改

   ```
   git commit -a
   ```

4. 回到主分支

   ```
   git checkout master
   ```

5. 取獲遠程的最新修改

   ```
   git pull
   ```

6. 回到工作分支

   ```
   git checkout demoname
   ```

7. 用 rebase合併主分支的修改

   ```
   git rebase master
   ```

8. 回到主分支

   ```
   git checkout master
   ```

9. 合併工作分支的修改

   ```
   git merge demoname
   ```

10. 提交到主分支

    ```
    git push
    ```

## git版本回覆

```
git log --oneline -5 //查詢最近的上傳紀錄
git reset --hard HEAD~ //此段恢復最近一段版本紀錄
```






---
### 如何清除本地分支
**建議動作都在dev分支上，就不會清除當前使用的分支**

> 確認當前本地分支 
```
 git branch | egrep -v "(^\*|master|release)"
```
> 快速清除本地 已用不到的分支
```
git branch | egrep -v "(^\*|master|release)" | xargs git branch -D
```
> 如果要過濾特定分支名稱 可以在這邊在修改
```
"(^\*|master|release)"
```


###### tags: `Git` `Gitlab`