Git 版本控管,寫程式的起手式
Git 版本控管,寫程式的起手式
什麼是Git?為什麼要用Git?
Git是版本控制系統,專業一點說分散式版本控制系統,他就像我們玩遊戲的紀錄一樣,
可以讓你儲存當下的所有狀態,並且隨時切換到任何一個紀錄.我們之所以要使用Git是因為
他可以幫我們管理程式碼,在開發的過程中,所有的程式碼都有紀錄,可以隨時回到的某一
個版本或狀態,並且針對每次紀錄的修改都可以清楚地知道,修改了哪一個檔案哪一行,這對
於軟體開發非常的有用,可以參考
可以讓你儲存當下的所有狀態,並且隨時切換到任何一個紀錄.我們之所以要使用Git是因為
他可以幫我們管理程式碼,在開發的過程中,所有的程式碼都有紀錄,可以隨時回到的某一
個版本或狀態,並且針對每次紀錄的修改都可以清楚地知道,修改了哪一個檔案哪一行,這對
於軟體開發非常的有用,可以參考
Git 常用指令
網路上很多Git教學都寫得很好,我這邊就不多說只記錄我覺得常用的一些簡單觀念和指
令分享,主要還是讓自己未來可以有的地方回憶.
令分享,主要還是讓自己未來可以有的地方回憶.
概念定義
-
工作目錄:Git會以一個資料夾當作工作目錄,目錄內的檔案都在git的範圍.
-
索引(Stage):所有檔案會先經過Stage在進入到Repository,也就是說你把要
加入版空的檔案夾入到Stage,Git就會開始追蹤紀錄加入Stage的檔案.
-
數據庫(Repository):Git的資料庫,所以都版本紀錄都在這裡面.
工作目錄:Git會以一個資料夾當作工作目錄,目錄內的檔案都在git的範圍.
索引(Stage):所有檔案會先經過Stage在進入到Repository,也就是說你把要
加入版空的檔案夾入到Stage,Git就會開始追蹤紀錄加入Stage的檔案.
數據庫(Repository):Git的資料庫,所以都版本紀錄都在這裡面.
安裝
Linux
Centos: sudo yum install git-all
Ubuntu: sudo apt-get install git-all
Mac
http://git-scm.com/download/mac
Windows
http://git-scm.com/download/win
http://git-for-windows.github.io/
初始化(init)
指令
說明
git init
初始化或創建
git clone remote repository
複製遠端Git檔案庫
git status
查看狀態
指令
|
說明
|
git init
|
初始化或創建
|
git clone remote repository
|
複製遠端Git檔案庫
|
git status
|
查看狀態
|
設定檔
通常在資料夾的.git資料夾(預設隱藏)裡的config檔案
指令
說明
git config --system -l
查看系統 config 設定
git config --global -l
查看全域 config 設定
git config -l
查到當前目錄下的 config 設定
git config user.name "user"
設定使用者名稱,在commit 時會使用這個名稱
git config user.email "user@okborn.com"
設定使用者 Email
git config --unset user.name
解除使用者名稱
git config alias.sh status
git config alias.cm commit
設定別名,設定完後
git sh == git status or git cm == git commit
指令
|
說明
|
git config --system -l
|
查看系統 config 設定
|
git config --global -l
|
查看全域 config 設定
|
git config -l
|
查到當前目錄下的 config 設定
|
git config user.name "user"
|
設定使用者名稱,在commit 時會使用這個名稱
|
git config user.email "user@okborn.com"
|
設定使用者 Email
|
git config --unset user.name
|
解除使用者名稱
|
git config alias.sh status
git config alias.cm commit
|
設定別名,設定完後
git sh == git status or git cm == git commit
|
查看歷史紀錄
指令
說明
git log
顯示commit節點歷史紀錄
git log --graph
顯示commit節點的演進圖
git log --oneline
顯示單行commit節點歷史紀錄
git log --all
顯示--all全部分支,
git log --decorate
顯示--decorate顯示分支名稱
git log HEAD
查詢任何分支的歷史紀錄
指令
|
說明
|
git log
|
顯示commit節點歷史紀錄
|
git log --graph
|
顯示commit節點的演進圖
|
git log --oneline
|
顯示單行commit節點歷史紀錄
|
git log --all
|
顯示--all全部分支,
|
git log --decorate
|
顯示--decorate顯示分支名稱
|
git log HEAD
|
查詢任何分支的歷史紀錄
|
圖形介面
指令
說明
gitk
圖形檢視模式
gitk --all
圖形檢視模式,全部分支
git show HEAD
HEAD最新節點
git show HEAD~1
最新的前一個節點
指令
|
說明
|
gitk
|
圖形檢視模式
|
gitk --all
|
圖形檢視模式,全部分支
|
git show HEAD
|
HEAD最新節點
|
git show HEAD~1
|
最新的前一個節點
|
版本差異查看
指令
說明
git diff
查看修改差異
git difftool
查看修改差異
pycharm version control
介紹
指令
|
說明
|
git diff
|
查看修改差異
|
git difftool
|
查看修改差異
|
pycharm version control
|
介紹
|
Git ignore 檔案
.gitignore 如果有一些檔案不想要加入版本控管,就可以把檔名加入到這個檔案檔案,
通常都要手動自己創建.Pyramid 常用會加入到.gitignore的檔案,
包含環境變數、.pyc檔案、log黨等.
.idea
env
*.egg-info
*.pyc
logs
static/*
.cache
.coverage
htmlcov
通常都要手動自己創建.Pyramid 常用會加入到.gitignore的檔案,
包含環境變數、.pyc檔案、log黨等.
.idea
env
*.egg-info
*.pyc
logs
static/*
.cache
.coverage
htmlcov
|
加入索引(Stage)
指令
說明
git add poem.txt
加入poem.txt到statge
git add .
全部加入stag
git add -u
被刪除和被修改的檔案加入到git索引
git add -A .
包含檔案刪除的都會更新到git檔案庫
-A:檢查資料夾是否有檔案被刪除
指令
|
說明
|
git add poem.txt
|
加入poem.txt到statge
|
git add .
|
全部加入stag
|
git add -u
|
被刪除和被修改的檔案加入到git索引
|
git add -A .
|
包含檔案刪除的都會更新到git檔案庫
-A:檢查資料夾是否有檔案被刪除
|
提交(Commit)
指令
說明
git commit -m "First commit"
提交並且寫備註
指令
|
說明
|
git commit -m "First commit"
|
提交並且寫備註
|
回復版本
指令
說明
git reset HEAD --soft
只有檔案庫裡的資料會變更,git
索引和資料夾的檔案都不會受影響
git reset HEAD --mixed
(預設)只有git 索引回復到指
定節點狀態,資料夾中的檔案不會受影響
git reset HEAD --hard
放棄這次的變更,回到最新的
版本,資料夾中的檔案全部回復到指定版本
指令
|
說明
|
git reset HEAD --soft
|
只有檔案庫裡的資料會變更,git
索引和資料夾的檔案都不會受影響
|
git reset HEAD --mixed
|
(預設)只有git 索引回復到指
定節點狀態,資料夾中的檔案不會受影響
|
git reset HEAD --hard
|
放棄這次的變更,回到最新的
版本,資料夾中的檔案全部回復到指定版本
|
刪除或更名檔案
指令
說明
git rm --cached poem.txt
參數--cached 只會從tracked清單中刪除,
不會刪除實際檔案
git reset HEAD poem.txt
已加入過staged先刪除檔案,
在下git add -A .會直接比對檔案和資料庫,
如果找不到檔案就會刪除檔案庫資料
git mv 原來檔名 新的檔名
修改檔名
指令
|
說明
|
git rm --cached poem.txt
|
參數--cached 只會從tracked清單中刪除,
不會刪除實際檔案
|
git reset HEAD poem.txt
|
已加入過staged先刪除檔案,
在下git add -A .會直接比對檔案和資料庫, 如果找不到檔案就會刪除檔案庫資料 |
git mv 原來檔名 新的檔名
|
修改檔名
|
分支(Branch)
指令
說明
git checkout poem.txt
檔名從 Git 檔案庫 取出檔案
git checkout -b develop
創建並切換到develop分支
git branch pellok commit xxx
開pellok分支從xxx節點,預設master分支
git checkout pellok
切換到pellok分支
git branch -d pellok
刪除分支必須切換到別的分支
git branch -m pellok
修改分支名稱,需再分支裡面
git checkout A
git merge B
在A分支合併B分支
指令
|
說明
|
git checkout poem.txt
|
檔名從 Git 檔案庫 取出檔案
|
git checkout -b develop
|
創建並切換到develop分支
|
git branch pellok commit xxx
|
開pellok分支從xxx節點,預設master分支
|
git checkout pellok
|
切換到pellok分支
|
git branch -d pellok
|
刪除分支必須切換到別的分支
|
git branch -m pellok
|
修改分支名稱,需再分支裡面
|
git checkout A
git merge B
|
在A分支合併B分支
|
分支合併
分支合併有兩個主要的觀念
-
fast-forward merage (一定成功)(不會有新的commit) 常在單獨一個分支開發常遇到
-
3-way merge (可能有有衝突)(有新的commit) 多人開發常遇到
在合併分支的時候,常常會有檔案有衝突的情況,以下是解決衝突會標記出來的地方
指令
說明
git cherry-pick commit xxx
合併commit
git cherry-pick --abort
取消合併
git cherry-pick --continue
解決衝突,繼續合併
<<<<<<< HEAD
=======
>>>>>>> pellok
fast-forward merage (一定成功)(不會有新的commit) 常在單獨一個分支開發常遇到
3-way merge (可能有有衝突)(有新的commit) 多人開發常遇到
指令
|
說明
|
git cherry-pick commit xxx
|
合併commit
|
git cherry-pick --abort
|
取消合併
|
git cherry-pick --continue
|
解決衝突,繼續合併
|
<<<<<<< HEAD
=======
>>>>>>> pellok
|
版本標籤
指令
說明
git tag v1.0 commit
創建標籤,並更新到線上版本
git tag -d v1.0
刪除標籤
指令
|
說明
|
git tag v1.0 commit
|
創建標籤,並更新到線上版本
|
git tag -d v1.0
|
刪除標籤
|
遠端Git資料庫
因為 Git 是分散式系統,所以有遠端和本地端的版本,可以單獨使用
指令
說明
git remote add new-repo
增加遠端Repostory
git remote rm new-repo
移除遠端Repostory
git remote rename
修改遠端名稱
git remote show
顯示遠端
git remote set-url new-repo
設定遠端Repository URL
git ls-remote
顯示遠端資料
git remote -v
遠端版本
git push new-repo --delete test
指令
|
說明
|
git remote add new-repo
|
增加遠端Repostory
|
git remote rm new-repo
|
移除遠端Repostory
|
git remote rename
|
修改遠端名稱
|
git remote show
|
顯示遠端
|
git remote set-url new-repo
|
設定遠端Repository URL
|
git ls-remote
|
顯示遠端資料
|
git remote -v
|
遠端版本
|
git push new-repo --delete test
|
遠端GIT資料庫指令
基本上都是先 fetch 檢查兩邊的版本,在 pull 更新local端,最後在 push 更新遠端
指令
說明
git push
把本地版本更新到遠端版本
git push origin master
更新遠端的master
git push --set-upstream
git pull
把遠端版本更新到本地版本
git pull --rebase
git fetch
檢查遠端版本
git fetch --all
檢查所有的分支
指令
|
說明
|
git push
|
把本地版本更新到遠端版本
|
git push origin master
|
更新遠端的master
|
git push --set-upstream
| |
git pull
|
把遠端版本更新到本地版本
|
git pull --rebase
| |
git fetch
|
檢查遠端版本
|
git fetch --all
|
檢查所有的分支
|
搜尋關鍵字
指令
說明
git grep "member"
-i:不區分大小寫
-l:只要列出包含該字串的檔案
-c:每一個檔案中有幾行含有該字串
git grep -e "member" -e "account"
git grep -e "member" --and -e "account" --and,--or,()
git blame -L 起始行, 結束行, 檔案名稱
找每一行最後是由誰修改
指令
|
說明
|
git grep "member"
|
-i:不區分大小寫
-l:只要列出包含該字串的檔案
-c:每一個檔案中有幾行含有該字串
|
git grep -e "member" -e "account"
| |
git grep -e "member" --and -e "account" --and,--or,()
| |
git blame -L 起始行, 結束行, 檔案名稱
|
找每一行最後是由誰修改
|
暫時存擋
這個很常用,寫到一半的程式突然被要求修正Bug時,
可以先暫存目前的版本,
等修正完Bug後再回來繼續寫.
指令
說明
git stash save
暫時存擋
git stash list
列出暫存的列表
git checkout commit xxx
拿出暫存
git stash pop
git stash apply
拿出暫存
可以先暫存目前的版本,
等修正完Bug後再回來繼續寫.
指令
|
說明
|
git stash save
|
暫時存擋
|
git stash list
|
列出暫存的列表
|
git checkout commit xxx
|
拿出暫存
|
git stash pop
| |
git stash apply
|
拿出暫存
|
清理Git檔案庫
指令
說明
git rebase
清理Git檔案庫
git gc
--aggressive 詳細檢查及清理長時間
--auto 自動判斷是否需要清理
--no-prune 只要整理
git rebase master
git rebase --abort
git rebase --continue
指令
|
說明
|
git rebase
|
清理Git檔案庫
|
git gc
|
--aggressive 詳細檢查及清理長時間
--auto 自動判斷是否需要清理
--no-prune 只要整理
|
git rebase master
| |
git rebase --abort
| |
git rebase --continue
|
多人協同製作
指令
說明
fork
複製整個 Repository
pull request
發出合併請求
指令
|
說明
|
fork
|
複製整個 Repository
|
pull request
|
發出合併請求
|
Git ignore 移除不必要的環境檔
指令
說明
git rm --cached -r .idea
刪除檔案
git rm --cached -r env
git add .
git commit -m "remove .idea and env"
指令
|
說明
|
git rm --cached -r .idea
|
刪除檔案
|
git rm --cached -r env
| |
git add .
| |
git commit -m "remove .idea and env"
|
Git revert 針對已經提交過的Commit 做撤銷
Revert撤销一个提交的同时会创建一个新的提交。
这是一个安全的方法,因为它不会重写提交历史。
比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,
然后把这个提交加入項中。
指令
說明
git checkout hotfix
git revert HEAD~2
这是一个安全的方法,因为它不会重写提交历史。
比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,
然后把这个提交加入項中。
指令
|
說明
|
git checkout hotfix
| |
git revert HEAD~2
|
沒有留言:
張貼留言