- 完整,简中:http://wowubuntu.com/markdown/index.html
- 简单,简中:http://wowubuntu.com/markdown/basic.html
- 摘自简书《Markdown的常用语法(个人总结)》作者ConnorLin:https://www.jianshu.com/p/82e730892d42#fn1
- 初始化一个Git仓库,使用
git init命令; - 第一步,使用命令
git add file,注意,可反复多次使用,添加多个文件; - 第二步,使用命令
git commit,完成; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d599b3aed534aaab22a0db6c4e07fd0000
- 命令
pwd用于显示当前目录; - 要随时掌握工作区的状态,使用
git status命令; - 如果
git status告诉你有文件被修改过,用git diff可以查看修改内容; - 用
git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374829472990293f16b45df14f35b94b3e8a026220c5000
- 标记HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令
git reset --hard commit_id; - 穿梭前,用
git log可以查看提交历史,以便确定要回退到哪个版本; - 要重返未来,用
git reflog查看命令历史,以便确定要回到未来的哪个版本; - 再说一遍:使用命令
git reset --hard commit_id跳到指定版本; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000
- 工作区丢弃:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file; - 暂存区丢弃:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee90db11b13d4ba9a73b9047f4fb968d000
- 从版本库中删除该文件,那就用命令
git rm删掉,并且git commit; - 命令
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”,但是只能恢复文件到最新版本,会丢失最近一次提交后修改的内容; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758392816224cafd33c44b4451887cc941e6716805c000
- 要克隆一个仓库,首先必须知道仓库的地址,然后使用
git clone命令克隆; - Git支持多种协议,包括
https,但通过ssh支持的原生git协议速度最快; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375233990231ac8cf32ef1b24887a5209f83e01cb94b000
- 查看分支:
git branch; - 创建分支:
git branch name; - 切换分支:
git checkout name; - 创建+切换分支:
git checkout -b name; - 合并某分支到当前分支:
git merge name; - 删除分支:
git branch -d name; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000
- 合并分支时,加上
--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410364457b9e3d821f4244beb0fd69c61a185ae0000
- 在实际开发中,我们应该按照几个基本原则进行分支管理;
- 首先,
master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; - 你和你的小伙伴们每个人都在
dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了; - 至于
dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410364457b9e3d821f4244beb0fd69c61a185ae0000
- 开发一个新
feature,最好新建一个分支; - 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
- 如果要丢弃一个没有被合并过的分支,可以通过
git branch -D name强行删除; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376026233004c47f22a16d1f4fa289ce45f14bbc8f11000
- 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成;
- 用
git log --graph命令可以看到分支合并图; - 指令
$ git log --graph --pretty=oneline --abbrev-commit//好看点的展示(?) https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000
- 当手头工作没有完成时,先把工作现场
git stash一下,然后去修复bug,修复后,用git stash list查看; - 一是用
git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除; - 另一种方式是用
git stash pop,恢复的同时把stash内容也删了; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d966923e5c4134bc8bf98dfb03aea3000
- 在github上"Create a new repo",例如命名为git_test,其他保持默认设置,
- 在本地git里输入
$ git remote add origin [email protected]:peachQAQ/git_test.git// 添加到本地 - 由于远程库是空的,我们第一次推送
master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。 - 关联后,使用命令
git push -u origin master第一次推送master分支的所有内容; - 此后,每次本地提交后,只要有必要,就可以使用命令
git push origin master推送最新修改; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013752340242354807e192f02a44359908df8a5643103a000 - 关于添加多个远程库和取消与远程库的链接:
//从本地空开始添加远程的git_test,本地叫它origin $ git remote add origin [email protected]:XXXXX/git_test.git //查看当前本地仓库 $ git remote -v origin [email protected]:XXXXX/git_test.git (fetch) origin [email protected]:XXXXX/git_test.git (push) //再添加一个本地名为origin1的远程库(不要在意为什么远程repo叫web-test) $ git remote add origin1 [email protected]:XXXXX/web-test.git //查看 $ git remote -v origin [email protected]:XXXXX/git_test.git (fetch) origin [email protected]:XXXXX/git_test.git (push) origin1 [email protected]:XXXXX/web-test.git (fetch) origin1 [email protected]:XXXXX/web-test.git (push) //取消跟web-test的远程库链接 $ git remote remove origin1 //再次查看 $ git remote -v origin [email protected]:XXXXX/git_test.git (fetch) origin [email protected]:XXXXX/git_test.git (push)
- 要查看远程库的信息,用
git remote -v; - 命令
$ git push origin xxxx// 把xxxx推送到origin; - 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 若推送失败,则需要先用
git pull抓取远程的新提交,解决冲突后,再次推送; https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013760174128707b935b0be6fc4fc6ace66c4f15618f8d000 - 若要推送文件夹,vscode可以直接“暂存”“提交”“推送/推送到”;
- 若是用git,则:
//跳转到需要上传的文件夹里 //(需要在原来repo对应本地文件夹里,如原来是git_test,则现在是git_test/newfolder2) $ cd ./newfolder2/ //添加文件到本地库里 $ git add try_folder2.txt //然后照样commit $ git commit -m "try using git to push new folder" [master 81bee7e] try using git to push new folder 1 file changed, 1 insertion(+) create mode 100644 newfolder2/try_folder2.txt //照样push到同一个远程库, //origin对应的是远程的repo,远程会自动在git_test里生成newfolder2文件夹 $ git push origin master Counting objects: 4, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 396 bytes | 396.00 KiB/s, done. Total 4 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To github.com:peachQAQ/git_test.git ff45d7d..81bee7e master -> master
- 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致; - 建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name; - 从远程抓取分支,使用
git pull,如果有冲突,要先处理冲突。 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013760174128707b935b0be6fc4fc6ace66c4f15618f8d000
- 命令
git tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id; - 命令
git tag -a tagname -m "blablabla..."可以指定标签信息; - 命令
git tag -s tagname -m "blablabla..."可以用PGP签名标签; - 命令
git tag可以查看所有标签。 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951758572072ce1dc172b4178b910d31bc7521ee4000
- 命令
git push origin tagname可以推送一个本地标签; - 命令
git push origin --tags可以推送全部未推送过的本地标签; - 命令
git tag -d tagname可以删除一个本地标签; - 命令
git push origin :refs/tags/tagname可以删除一个远程标签。(先删除本地,再删除远端) https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951885068a0ac7d81c3a64912b35a59b58a1d926b000
- 忽略某些文件时,需要编写
.gitignore; - 其中
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758404317281e54b6f5375640abbb11e67be4cd49e0000 - 指令
$ git config --global alias.st status可以用st代替status(更多例子看见教程) https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375234012342f90be1fc4d81446c967bbdc19e7c03d3000