文章目录
关于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
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