Skip to main content

基本操作

簡介

開源的分布式版本管理系統

https://git-scm.com/download/mac https://www.slideshare.net/WillHuangTW/git-merge-rebase https://tsejx.github.io/devops-guidebook/code/git/remote

工作區

Cache Flow

  • Workspace:工作區,就是你平時編寫程式碼的地方
  • Index / Stage:暂存區,用於臨時存放你的改動,實際上它只是一個文件
  • Repository:倉庫區(或版本庫),就是安全存放數據的位置,這裡面有你提交到所有版本的數據。其中HEAD指向最新放入倉庫的版本
  • Remote:遠程倉庫,託管程式碼的 Git 服務器

文件狀態

Cache Flow

  • Untracked:未追踪, 此文件在文件夾中, 但並没有加入到 Repository, 不参與版本控制. 通過 git add 狀態變為 Staged
  • Unmodify:文件已經入 Repository, 未修改, 即版本庫中的文件快照内容與文件夾中完全一致,這種類型的文件有兩種去處,如果被修改, 則變為 Modified,如果使用git rm 移出 Repository,則成為Untracked 文件
  • Modified:文件已修改,並没有進行其他的操作,這個文件也有兩個去處,通過 git add 可進入 staged 狀態,使用 git checkout 則丟棄修改過,返回到 unmodify 狀態,這個 git checkout 即從庫中取出文件,覆蓋當前修改。(注意,這裡 cheakout 只會將沒有 add 過的文件丟棄,如果文件已經被加入暫存區則不會被丟棄)

基本指令

  • 拉取遠端倉庫 git clone url

  • 創建本地新倉庫 git init

  • 添加和提交到本地倉庫 git add . git commit -m "代碼提交信息"

  • 推送提交到遠端倉庫 git push origin masrer

  • 如果未clone遠端倉庫,可將本地新建的倉庫連結到遠端倉庫 git remote add origin "server"

  • 創建分支並切換 git checkout -b new_feature

  • 刪除分支 git branch -d new_feature

  • 推送分支 git push origin new_feature

  • 更新 git pull

  • 還原至遠端倉庫的版本 git commit --amend

  • 修改commit 備註 git fetch git reset --hard sha (修改的部分完全刪除) git reset --soft sha (修改的部分保留在工作區)

  • 設定配置 name and email git config --global user.name "username" git config --global user.email username@example.com

  • 修改全域設定檔 vim ~/.gitconfig

  • 修改特定專案設定檔 vim .git/config

  • 查看配置 git config --system --list git config --global --list git config --local --list

  • git checkout 檔名 or . (可以恢復檔案)

  • rebase後反悔 git reset --hard ORIG_HEAD (返回上一個commit狀態,不管是rebase,merge動作)

  • 刪除分支(D強行刪除) git branch -D cat

  • 恢復分支(從新在commit上貼上標籤new_cat) git branch new_cat commitID

  • 添加遠端庫url git remote add <遠端數據庫簡稱> 遠端庫地址(url)

  • 查看本地端的數據庫簡稱和地址 git remote -v

  • 刪除本地端的數據庫簡稱和地址 git remote rm 數據庫簡稱

  • 更新設定本地端指定的數據庫簡稱和地址 git remote set-url origin https://XXX.git

  • 拉取遠端upstream庫更新到本地master分支 git fetch upstream master

  • 將遠端upstrem庫更新合併到本地master分支 git rebase upstream/master

分支回滚到上一版本

  • 切換分支 git checkout new_feature
  • 查看git log git log
  • 回滚到指定版本,歷史版本的id是fae6966548e3ae76cfa7f38a461c438cf75ba965 git reset --hard fae6966548e3ae76cfa7f38a461c438cf75ba965
  • 遠端倉庫分支修改 git push -f -u origin new_feature

推送本地專案至倉庫

建立本地專案

  1. git init

  2. 在Git服務器建立一個倉庫 執行git remote add origin

  3. git remote add origin https://xxx.xxx.xxx/xxx.git

  4. git pull origin master:master 從遠端分支拉取master分支並與本地master分支合併

  5. git push -u origin master 提交本地分支到遠端分支

建立 ssh 連線驗證

本機需要設定 ssh 建立和 gitlab 連線,才能將本機的 repo 推上 gitlab。

  • 確認本機 .ssh 有一組公私鑰。
  • 複製公鑰內容。
  • 貼上至 gitlab SSH key。

Cache Flow Cache Flow

免輸入帳號密碼

git config --global credential.helper store

fetch rebase and pull

  • git fetch:这将更新git remote 中所有的远程repo 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中。
  • git fetch remote_repo:这将更新名称为remote_repo 的远程repo上的所有branch的最新commit-id,将其记录。 git fetch remote_repo remote_branch_name:这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name。 git fetch remote_repo remote_branch_name:local_branch_name:这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name ,并在本地创建local_branch_name 本地分支保存远端分支的所有数据。

code commit flow

  1. git add .
  2. git commit -m "message"
  3. git fetch origin master --tags,拉取遠端apollo所有版本號
  4. git rebase v1.xx.xxx,本地版本合併剛剛從遠端拉取的最後版本號,將本地版本號指向最新版本號
  5. git tag v1.5.166xxx,同步完遠端代碼,並在local rebase至遠端最新 commit 位置,打印tag
  6. git push origin master --tags,將代碼推送至遠端庫

gitignore

https://www.cnblogs.com/kevingrace/p/5690241.html .log .tmp node_modules/

gitk or Sourcetree

  1. 點擊commit的點,右鍵選擇reverse commit,會生成一個commit點,這個reverse commit的變更動作就是取消上一個commit的變更

  2. git reset HEAD^ --soft 回到前一個commit

  3. git reset HEAD~3 --soft 回到前三個commit

  4. git reset 165b8d5 --hard 往前跳至165b8d5 commit點(git reflog查看刪掉的commit點的sha)

  5. 假若merge 分支後,想reverse回merge前的commit,可以在gui介面想回到的commit點右鍵reset master to this commit