本文最后更新于 <span id="expire-date"></span> 天前,文中部分描述可能已经过时。
命令行
cd
打印当前的路径
dir
打印当前路径下的文件
cls
清楚命令
cd ..
返回上级目录
echo <content> > <fileName>.<fileType>
创建文件
mkdir <fileName>
创建文件夹
rm <file>
删除文件
rmdir <dir>
删除文件夹
cd D:
切换到D磁盘
dir
现实当前目录所有文件夹
cd 相对路径/绝对路径
cd /
回到根目录
copy <file> <path>
将文件拷贝到path路径
move <file> <path>
将文件移动到path路径
git原理
Working Directory
.git(hidden): Staging Area (Index File), Commits (Objects Folder)
git init
创建git repository
git add <file>
添加文件
git rm <file>
删除文件
git commit -m <message>
提交文件
git status
查看状态
git add <file>
添加某一文件
git add .
添加所有文件
git log
查看日志
git ls-files
查看工作区文件
撤销commit
:
git reset --soft HEAD~<number>
撤销commit, 暂存区不变git reset HEAD~<number>
撤销commit,暂存区变化git reset --hard HEAD~<number>
撤销commit, 暂存区和工作区都变化
分支
git branch
查看分支
git branch <branchName>
创建分支
git switch <name>
/git checkout <branchName>
切换分支
git switch -c <name>
/ git checkout -b <branchName>
创建并切换分支
git merge <name>
合并某分支到当前分支
git branch -d <branchName>
删除分支
git log --graph
分支合并图
若使用git checkout <id>
回退到,会形成一个分离的head分支,可在这个分离的分支上做修改。若切换git switch master
,则head分支会消失。此时可以,再用git checkout <branchName> <headId>
创建一个内容和分离分支相同的分支,再git merge <branchName>
合并到主分支
fast-forward用于主分支未作提交,
git merge
git merge --squash <branchName>
git merge --no-ff <branchName>
git rebase 和 git merge的区别
- git rebase 和 git merge 都是用来合并分支的
- 两者作用一样,但原理不同
假设有master和feature分支,在专用分支上开发新feature时,然后另一个团队在master分支提交了新的commits,若在master分支上的新提交与正在开发的feature相关,需要master分支将新提交的记录合并到feature分支,可以采用git merge
或者git rebase
指令
git merge
1 | git checkout feature |
git merge
会在feature分支新增一个新的merge commit,然后将两个分支的历史联系在一起
- merge是一种非破坏性的操作,对现有分支不会以任何方式被更改
- feature分支每次需要合并上游更改时,都会产生一个额外的合并提交
- 如果master提交非常活跃,可能会严重污染feature分支的历史记录,但可以用
git log
缓解
git rebase
1 | git checkout feature |
rebase
会将整个feature分支移动到master分支的顶端,从而有效地整合了所有master分支上的提交- 与
merge
提交方式不同,rebase
通过为原始分支的每个提交创建全新的commits来重写项目历史记录,特点是仍然会在feature分支上形成线性提交 rebase
的好处是可以获得清晰地项目历史,消除了git merge
所需的不必要的合并提交,rebase
还会产生完美线性的项目历史记录,可以在feature分支上没有任何分叉的情况下一直追寻到项目的初始提交
git merge 原理
在对特征分支进行rebase后,等效于创建了新的提交,并且老的提交没有被销毁,但不能简单地被访问或使用
注意点:
- 在重放之前的提交的时候,git会创建新的提交,即使重放的提交与之前的一模一样,git仍然会视之为新的提交进行处理
git rebase
并不会删除老的提交,也就是说对某个分支进行了rebase操作后,老的提交仍然存放在.git文件夹的objects目录下
如何取舍
- get merge的优点是分支代码合并后不破坏原分支的代码提交记录,缺点是会产生额外的提交记录并进行两条分支的合并
- git rebase优点是无须新增提交记录到目标分支,rebase后可以将对象分支的提交历史续上目标分支上,形成线性提交历史记录,进行review的时候更加直观
不能在一个共享的分支上进行Git rebase操作
回退修改
HEAD
指向的版本就是当前版本
查看修改内容: git diff <file>
git reset . / git reset <fike>
撤销更改(已被add到暂存区)
git checkout . / git checkout <file>
撤销更改(未被add到暂存区)
git restore . / git restore <file>
撤销更改(未被add到暂存区)
git stash / git stash -m <message>
撤销更改(未被add到暂存区)
git stash apply
恢复更改
git stash list
查看更改列表
创建.gitignore
, 可添加需要忽略的文件
例如
1 | *.log //忽略所有log类型的文件 |
git clean -dn
打印添加的但未被跟踪的文件
git reflog
查看命令历史(30天)
git reset --hard <commit_id/HEAD~n>
切换历史文件
查看文件: cat <file>
放弃工作区的修改: git checkout -- <file>
添加到暂存区,想放弃修改: git reset HEAD <file>
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
强行删除未合并过的分支: git branch -D <name>
查看远程库信息:
git remote -v
从本地推送分支:
git push origin <branch-name>
,若推送失败先用git pull
抓取远程的新提交在本地创建和远程分支对应的分支:
git checkout -b <branch-name> origin/<branch-name>
建立本地分支和远程分支的关联:
git branch --set-upstream <branch-name> origin/<branch-name>
从远程抓取分支: `git pull
远程仓库
关联远程库: git remote add origin git@server-name:path/repo-name.git
第一次推送master分支: git push -u origin master
后续推送: git push origin master
克隆远程库: git clone <link>
- `
标签管理
新建标签: git tag <tagname>
(默认为HEAD
,可指定一个commit id)
指定标签信息: git tag -a <tagname> -m "blabla……"
查看所有标签: git tag
推送一个本地标签: git push origin <tagname>
推送所有未推送过的标签: git push origin --tags
删除一个本地标签: git tag -d <tagname>
删除一个远程标签: git push origin :refs/tags/<tagname>
GitHub
local branch 与 remote branch之间通过 remote tracking branch(git branch -a
进行查看)进行关联,本地与远程并没有直接联系
获取令牌
setting - Developer settings - Personal tokens - Generate new token
本地推送到Github
在GitHub建立一个仓库
在本地建议一个与仓库名的文件夹,用vs code 打开,进行增删改查文件
在终端
git init
,再进行git add .
或者git add <filename>
,并且git commit -m "blabla"
git remote add origin <URL>
git branch -M main
,分支重命名(可选)若上步未重命名,则
git push origin master
,否则git push -u origin main
如果
git push
无效,则git push origin master
本文作者:Mosquito
本文链接: http://example.com/2022/06/06/Git%20&%20Github/
Mosquito 天使之吻手打
文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。