基本操作
簡介
開源的分布式版本管理系統
https://git-scm.com/download/mac https://www.slideshare.net/WillHuangTW/git-merge-rebase https://tsejx.github.io/devops-guidebook/code/git/remote
工作區
- Workspace:工作區,就是你平時編寫程式碼的地方
- Index / Stage:暂存區,用於臨時存放你的改動,實際上它只是一個文件
- Repository:倉庫區(或版本庫),就是安全存放數據的位置,這裡面有你提交到所有版本的數據。其中HEAD指向最新放入倉庫的版本
- Remote:遠程倉庫,託管程式碼的 Git 服務器
文件狀態
- 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
推送本地專案至倉庫
建立本地專案
git init
在Git服務器建立一個倉庫 執行git remote add origin
git remote add origin https://xxx.xxx.xxx/xxx.git
git pull origin master:master 從遠端分支拉取master分支並與本地master分支合併
git push -u origin master 提交本地分支到遠端分支
建立 ssh 連線驗證
本機需要設定 ssh 建立和 gitlab 連線,才能將本機的 repo 推上 gitlab。
- 確認本機 .ssh 有一組公私鑰。
- 複製公鑰內容。
- 貼上至 gitlab SSH key。
免輸入帳號密碼
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
- git add .
- git commit -m "message"
- git fetch origin master --tags,拉取遠端apollo所有版本號
- git rebase v1.xx.xxx,本地版本合併剛剛從遠端拉取的最後版本號,將本地版本號指向最新版本號
- git tag v1.5.166xxx,同步完遠端代碼,並在local rebase至遠端最新 commit 位置,打印tag
- git push origin master --tags,將代碼推送至遠端庫
gitignore
https://www.cnblogs.com/kevingrace/p/5690241.html .log .tmp node_modules/
gitk or Sourcetree
點擊commit的點,右鍵選擇reverse commit,會生成一個commit點,這個reverse commit的變更動作就是取消上一個commit的變更
git reset HEAD^ --soft 回到前一個commit
git reset HEAD~3 --soft 回到前三個commit
git reset 165b8d5 --hard 往前跳至165b8d5 commit點(git reflog查看刪掉的commit點的sha)
假若merge 分支後,想reverse回merge前的commit,可以在gui介面想回到的commit點右鍵reset master to this commit