文章目錄
- 關于Git
- 修改與版本回退
- 跳出修改(checkout)
- 重設版本(reset)
- 放棄(restore)
- 復盤(revert)
- 分支操作:Git的靈魂
- 增、改、合的主要語法
- 解決沖突
- 遠程協作
- 關聯遠程庫
- 推送改動(push)
- 遠程拉取(pull)
- 參考檔案
- 鏈接串列
關于Git
重要的且絕對優質的學習資源:
廖雪峰的官方網站:Git教程
Git Pro Book
Git官方檔案
Git核心思想:
- 版本控制(SVN也有)
- 低成本分支:通過移動指標實作
- 本地-遠程的分布式:不把雞蛋放在一個籃子里
- 應用思想:殊途同歸是Git哲學,
修改與版本回退
詳見git checkout/git reset/git revert/git restore常用回退操作
在Git中,commit、版本和HEAD之間有著密切聯系,commit即是版本,HEAD為(當前所在的)commit的參考,詳見HEAD相關的Git時間線結構基本概念總結
跳出修改(checkout)
檢出當前修改,這里用于消除作業樹改動(作業樹就是本地檔案夾)
使用格式:
git checkout -- <file_name>
注意檔案名稱之前有個空格,只能消除改動,不能消除untracked檔案,消除untracked檔案需要使用clean指令
- 如果沒有stage,就撤銷作業區的changes
也可以使用
git restore --worktree <filename>或git restore -W <filename> - 如果已經stage,撤銷這次stage
重設版本(reset)
重設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)
意為重置,推翻先前,restore的兩類用法可以被checkout和reset解決,分別為撤銷作業區改動和版本回滾,在前面已經說過,但對于discard changes、unstage,restore的語法可以非常簡明:
git restore <filename>
詳見https://www.jianshu.com/p/dcef204dba74
復盤(revert)
意為再來一遍,以前的記錄不會抹掉,把某個指定版本續在變化時間線后面,
分支操作:Git的靈魂
這是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,
推送改動(push)
遠程操作的最基礎陳述句:利用本地改變遠程,個人使用時(分支保證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,
遠程拉取(pull)
指令相關詳見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
則對其rebase,消除版本變化程序中的環:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/81253.html
標籤:其他
