Git Summary | Git 重點整理
FYI
*Git 是一款版本控制軟體而 GitHub 是一個商業網站,GitHub 的本體是一個 Git 伺服器,但這個網站上的應用程式讓大家可以透過 Web 介面來操作一些原本需要複雜的 Git 指令才能做到的事。
*Git 是一種分散式的版本控制系統,就算在深山裡或飛機上沒有網路可使用,也可正常的使用 Git,待有網路的時候再與其它人同步即可。Git 大部份的操作都是在自己電腦上就可完成,而且不管是遠端的伺服器或是自己的電腦,在同步之後大家都會有一份完整的檔案及歷史紀錄。
使用者設定
$> vim ~/.gitconfig
# 檔案名稱 .gitconfig [user] name = allan9527 email = [email protected] [core] excludesfile = /Users/allan9527/.gitignore_global [alias] co = checkout br = branch st = status l = log --oneline --graph ls = log --graph --pretty=format:"%h <%an> %ar %s" # ...略...
遠端與本地端儲藏庫協作
*遠端操作:自架的伺服器(非 GitHub)
$> git init --bare project.git #創造遠端儲藏庫,必須以 “.git” 為結尾
*本地端操作:如果你要觀察本地跟遠端儲存庫的關聯,就得仰賴 git remote
系列指令
- 觀看遠端儲存庫列表:git remote 或 git remote -v
- 下載遠端儲存庫的 project:git clone user@server_url:/git_repository_dir_path/project.git
- 加入遠端儲存庫:git remote add origin user@server_url:/git_repository_dir_path/project.git
*從遠端儲存庫下載 project 到本地端
$> git clone user@server_url:/git_repository_dir_path/project.git
*設定要 push 到遠端 server 儲存庫的位置
$> git remote add origin(名稱可自取) user@server_url:/git_repository_dir_path/project.git
*將本地端 project 推上遠端 server 的儲藏庫
$> git push origin master
查看誰改了這一行代碼
$> git blame filename
查看 Git Repository URL
$> git remote -v origin [email protected]:/home/allan/git_repository/future_trading (fetch) origin [email protected]:/home/allan/git_repository/future_trading (push)
切換到某一個 commit 的分支
法ㄧ:
$> git checkout 分支名稱 $> git checkout master # 切回主分支
法二:
$> git checkout HEAD~N . # HEAD 大小寫均可,N是數字,表示從現在倒回的版本 $> git checkout head . # 回到最新版本
刪除分支
刪除本地端分支:
$> git branch -d <local_branch>
刪除遠端分支:
$> git push origin :<remote_branch>
查詢每一個 commit 的編號
$> git reflog
冷知識
*Git 的三個區塊:工作目錄(working directory)、暫存區(staging area)、儲存庫(repository)
*只要加上 –allow-empty 參數,沒東西也是可以 Commit 的
$> git commit --allow-empty -m "空的"
*有些比較機密的檔案不想放在 Git 裡面一起備份,只要在專案目錄裡放一個 .gitignore
檔案,並且設定想要忽略的規則就行了。.gitignore
檔案設定的規則,只對在規則設定之後的有效,那些已經存在的檔案就像既得利益者一樣,這些規則是對他們沒有效果的。如果想套用 .gitignore
的規則,就必須先使用 git rm --cached
指令把這些既得利益者請出 Git,移出 Git 控管之後,它就會開始會被忽略了。
$> vim .gitignore
# 檔案名稱 .gitignore # 忽略 main.o 檔案 main.o # 忽略 config 目錄下的 add.py 檔案 config/add.py # 忽略所有 db 目錄下附檔名是 .sqlite3 的檔案 /db/*.sqlite3 # 忽略所有附檔名是 .tmp 的檔案 *.tmp # 當然你要忽略自己也可以,只是通常不會這麼做 # .gitignore
*實際上 git reset
指令也並不是真的刪除或是重新設定 Commit,只是「前往」到指定的 Commit,那些看起來好像不見的東西只是暫時看不到,但隨時都可以再撿回來。
修改與新增
[2021-12-09] 新增 | 刪除分支 |
[2021-10-26] 新增 | 查看誰改了這一行代碼 |
[2021-12-04] 新增 | 查看 Git Repository URL |