重要的且絕對優質的學習資源:
廖雪峰的官方網站:Git教學
Git Pro Book
Git官方檔案
Git核心思想:
詳見git checkout/git reset/git revert/git restore常用回退操作
在Git中,commit、版本和HEAD之間有著密切聯絡。commit即是版本,HEAD為(當前所在的)commit的參照。詳見HEAD相關的Git時間線結構基本概念總結
檢出當前修改,這裡用於消除工作樹改動(工作樹就是本地資料夾)
使用格式:
git checkout -- <file_name>
注意檔名稱之前有個空格。只能消除改動,不能消除untracked檔案。消除untracked檔案需要使用clean
指令
也可以使用
git restore --worktree <filename>
或git restore -W <filename>
重設HEAD指標,用於版本的回退。
# (對某branch)
git reset <version> <filename>`
version多用HEAD指標表達,也可以直接用版本號
HEAD
對應取消unstage,HEAD^
為回退一版,HEAD~n
為回退n版
unstage還可以使用
git restore --staged <filename>
或者git restore -S <filename>
。回退到特定版本可以直接加版本號。
預設為fixed模式,回退的改動返回工作樹(unstaged changes)。
意為重置,推翻先前。restore的兩類用法可以被checkout和reset解決,分別為復原工作區改動和版本回滾,在前面已經說過。但對於discard changes、unstage,restore的語法可以非常簡明:
git restore <filename>
詳見https://www.jianshu.com/p/dcef204dba74
意為再來一遍。以前的記錄不會抹掉。把某個指定版本續在變化時間線後面。
這是Git最巧妙的設計。簡單如下幾步(圖見HEAD、master 與 branch):
建立分支
平等、隔離地開發
詳見易百教學
檢視分支:
git branch
建立分支:
git checkout -b <branch-name> # 建立+切換
git branch <branch-name>
切換分支:
git checkout <branch-name>
git switch <branch-name>
git switch -c <branch-name> # 建立+切換
合併分支:
例:合併分支branch1
到當前分支:
git merge branch1
兩種常見的衝突。
第一種:管理版本之間的衝突:
git diff <filename>
使用diff命令之後,會在原檔案中出現
<<<<<<<<<<<<<<<<<<<<<<<<<<
==========================
>>>>>>>>>>>>>>>>>>>>>>>>>>
分隔開的兩段程式碼,將它們手動匯成一段即可。
在遠端共同作業中還有一個衝突的情況,即將一個空庫和本地庫建立關係的時候,對pull
使用--rebase
引數,即可將它們匯成合規的commit
時間線。
remote端也有類似於原生的一個HEAD指標,名為FETCH_HEAD,相關問題詳見https://www.cnblogs.com/Venom/p/5477367.html
關聯方法
git clone <url>
# 或
git remote add [庫名]
取消關聯:
git remote rm origin
庫名預設為origin,若要進行Gitee備份,可以將其同GitHub的關聯先刪掉,然後重新定名為github。
遠端操作的最基礎語句:利用本地改變遠端。個人使用時(分支保證up-to-date)常用。
語法:
git push [主機名] [本地分支]:[遠端分支]
範例情形
建立遠端分支master:git push origin master
刪除遠端分支master:git push origin :master
(把一個空分支推到指定的分支origin/master)
origin表示主機名,以上兩句的推播始末分別對應於
master:master
和[null]:master
建立local-remote追蹤:git push -u origin master
,或git branch --set-upstream master origin/next
有追蹤關係的推播更新:git push origin
(省略分支名,預設為當前所在分支和遠端對應分支)
僅有一個追蹤分支:git push
通常遠端庫會比原生的新,所以可能無法正常完成push,所以要先pull再push。
指令相關詳見https://www.yiibai.com/git/git_pull.html
從remote取回(fetch)且匯入本地(merge)處理not-up-to-date問題。
相當於如下三條語句的過程:
git fetch origin master:tmp
git diff tmp
git merge tmp
其語句結構和push一樣。
如果建立新倉庫的過程出現不相關拒絕merge的情況,如下:
fatal: refusing to merge unrelated histories
git pull --rebase origin master
(侵權請聯絡刪除)
廖雪峰的Git教學
Git官網檔案
git checkout/git reset/git revert/git restore常用回退操作
HEAD、master 與 branch
GIT復原修改 restore
易百教學:
git branch命令
git pull命令
git fetch, git pull 以及 FETCH_HEAD
簡單對比git pull和git pull --rebase的使用
Git submodule實戰
刪除git庫中untracked files(未監控)的檔案
https://www.liaoxuefeng.com/wiki/896043488029600
https://git-scm.com/doc
https://blog.csdn.net/albertsh/article/details/104719370
https://www.jianshu.com/p/4219b6f62ce3
https://www.jianshu.com/p/dcef204dba74
https://www.yiibai.com/git/git_branch.html
https://www.yiibai.com/git/git_pull.html
https://www.cnblogs.com/Venom/p/5477367.html
https://www.cnblogs.com/kevingrace/p/5896706.html
http://blog.jqian.net/post/git-submodule.html
https://blog.csdn.net/ronnyjiang/article/details/53507306