Git 梳理笔记
教室地址
学习该教程过程中,所做的笔记。
git 入门
本地仓库创建
git init
:执行后可以看到,仅仅在项目目录多出了一个.git 目录,关于版本等的所有信息都在 这个目录里面
克隆远程仓库
git clone [url]
: url 就是远程 git 项目的地
查看文件状态
git status [filename]
添加文件到暂存区
git add
提交暂存区文件到本地仓库
git commit -m “message”
创建分支
git branch [name]
切换分支
git checkout branchName
创建并切换分支
git branch -b [name]
ssh 测试是否生效
ssh -T git@github.com
忽略文件
不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等, 在主目录 下建立".gitignore"文件(默认就有)。
git文件管理
文件的四种状态
- Untracked :未追踪,此文件在文件夹中,但没有加入到git库中,不参与版本控制。
如果通过git add,状态变为Staged。
- Unmodify :文件已入库,未修改。即版本库中的文件快照与文件夹中完全一致。
如果它被修改,状态变为Modified。
如果通过git rm 移除版本库,状态变为Untracked
-
Modified :文件已修改,并没有进行其他操作。
如果通过git add,状态变为Staged。
如果通过git checkout,状态变为Unmodified。 git checkout即从库中取出文件,覆盖当前修改。
-
Staged :暂存状态。
如果通过git commit,状态变为Uncomdified。git commit即将修改同步到库中,本地和库一致。
Git 版本回退
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。(新 git restore <file>
)
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令 git reset HEAD <file>
,(新 git restore --staged <file>
)就回到了场景1,第二步按场景1操作。
场景3 :已经提交了不合适的修改到版本库时,想要撤销本次提交,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard [commit_id]
。
Git 分支操作
分支可以有多个(根据业务需求) 。
如果各分支没有交集,始终平行发展,则不需要合并(merge) 。
如果两个分支,需要合并,则执行 merge 操作。
-
查看分支:
-
git branch
-
git branch -r
列出远程 分支 -
git branch -a
列出所有分支
-
-
新建分支
git branch <branch-name>
-
切换分支
git checkout <branch-name>
git switch <branch-name>
新
-
创建+切换分支
git checkout -b <branch-name>
git switch -c <branch-name>
新
-
合并某分支到当前分支:
git merge <name>
git merge --no-ff -m "merge with no-ff" <branch-name>
- 用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而
fast forward
合并就看不出来曾经做过合并。
- 用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而
-
删除分支:
git branch -d <name>
-
复制一个特定的提交到当前分支
git cherry-pick <commit id>
远程库
关联远程库 git remote add <origin> git@server-name:path/repo-name.git
;
解除远程库:git remote rm <origin>
查看远程库信息:git remote -v
:如果没有推送权限,就看不到push的地址。
推送分支 git push <remote> <branch>
拉取分支 git pull <remote> <branch>
关联远程分支 git branch --set-upstream [branch] [remote-branch]
在本地创建和远程分支对应的分支 git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致
改变树结构
git checkout <commit id>
分离HEAD,HEAD指向某个提交
git checkout <name> ^
HEAD 指向 name 分支的父节点·
git checkout <name>~<num>
HEAD 指向name 分支上面第n个节点
保存工作现场
Git还提供了一个stash
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:git stash
查看工作现场:git stash list
恢复
git stash apply <stash@{number}>
但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
常用命令
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 新
$ git switch -c dev
# 新建一个分支,指向指定 commit
$ git branch [branch] [commit]
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 新
$ git switch master
# 切换到上一个分支
$ git checkout -
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个 commit,合并进当前分支
$ git cherry-pick [commit]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
# 显示最近到最远的提交日志, 我们可以看到三次提交
$ git log
$ git log --pretty=oneline
$ git log --graph --pretty=oneline --abbrev-commit
# 记录你的每一次命令
$ git reflog
使用git获取github上代码时报错:OpenSSL SSL_read: Connection was reset, errno 10054
(此时又必须开着vpn才能访问到github)
参考网上的回答,成功解决问题:
修改设置,解除ssl验证git config --global http.sslVerify “false” 此时,再执行git操作即可。
注:设置后关闭当前git窗口,重新打开再执行git操作