学习笔记 git
虽然每天都在用,但是从来没系统的学习过git,遇到特殊问题也总是东拼西凑查资料,于是觉得应该好好学习一下git的知识与原理,让自己的知识系统更坚固完善。
git 常用命令
git 全局设置
git config --global user.name "yourName"设置你的用户名
git config --global user.email"yourEmail"设置你的邮箱git config --global color.ui true设置git的颜色高亮
git config --global alias.st status设置别名,既可以使用git st可以替代git status
如
git config --global alias.co checkoutgit config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
git 本地操作
git init初始化git仓库(当前文件夹)git add <fileName>添加fileName到git索引中,可以写多个file,下次git commit会一并提交git commit -m "describe"提交当前git add的文件,-a参数表示全部提交git status查看当前仓库修改状态,那些文件被改动git diff <fileName>查看具体修改的地方git rm <fileName>删除仓库和本地的file,--cached参数表示不被跟踪,不会删除本地文件,git commit -a也不会提交,但是git status可以看到此文件,这时可以使用git add添加或者直接添加到.gitignore忽略此文件git log查看提交日志,--pretty=oneline参数可以省略提交日期与用户等信息,方便查看git reset --hard <commitId>版本回退/前进,git reset用于撤销未被提交到远端的改动,默认参数为--mixed,会撤销暂存区而保留当前工作空间的修改。
commitId是每次提交生成的hash类型的ID,通过git log可以看到。
也可以通过git reset --hard HEAD^回退到上次修改,使用--hard参数会同时更新暂存区和本地工作空间的文件,所以使用前最好先保存<commitId>。
HEAD^^^表示上上上次,HEAD~10表示上*10次,只要知道commitId,就可以穿梭到任意版本
- git跟踪管理的是修改,而不是文件,
git add之后没有提交再次的修改,需要重新git add才会提交第二次的修改,即修改->git add->修改->git add->git commit,当然,如果使用git -a参数的话,就算没有git add也可以提交 git checkout -- <fileName>检出单个文件,让file回退到最近一次git commit或git add时的状态,即撤销该文件所有修改(相对于最新一次的git commit或git add)。
如果文件错误更新后,并
git add了,那么上面的checkout命令已经不能回退到git add之前了,可以使用git reset HEAD <fileName>撤销掉暂存区的修改,
然后使用git checkout -- <fileName>恢复。
如果不仅
git add了,同时git commit了,使用上文提到的
git reset --hard <commitId> 进行版本回退/前进
代码语言:javascript复制
git checkout其实是用版本库里的版本替换工作区的版本git checkout <branchName>切换分支,会重写工作区,也就是检出单个文件的原理所在。那么就很好理解接下来的这一条:git checkout <commitId> -- /path/<fileName>/git checkout <branchName> -- /path/<fileName>还原某个commit版本/分支的某个文件强制拉取覆盖本地
git fetch --all
然后,你有两个选择:
git reset --hard origin/master
或者如果你在其他分支上:
git reset --hard origin/<branch_name>git 远程操作
git remote add origin git@github.com:ShyZhen/gitTest.git添加远程库,其实就是跟远程库做一个关联,之后可以git pull origin <branchName>把文件克隆到本地。
git clone git@github.com:ShyZhen/gitTest.git,git clone将整个项目克隆下来,包括项目名
git remote rm origin删除远程库(关联)git remote -v查看原仓库信息git clone git@github.com:ShyZhen/gitTest.git克隆到本地git pull origin <branchName>拉取远程分支(origin为默认远程库名字)git push origin <branchName>推送远程分支git push origin :<branchName>删除远程分支,是真的删除文件!git checkout -b <newBranchName>创建并切换到该分支(创建git branch <newBranchName>切换git checkout <newBranchName>)git branch查看当前分支git merge <branchName>在当前分支下,合并branchName到当前分支,之后可以使用git push推送远程分支git branch -d <branchName>删除branchName分支,-D参数为强制删除,当没有进行合并等操作时git stash暂存,手头上工作没完成的同时,需要切换分支干别的事git stash list查看暂存列表,git stash apply恢复文件,git stash drop删除暂存文件git tag <tagName> <commitId | lastest>创建标签,commitId默认是最新提交的git push origin <tagName>推送标签到远程
git tag -d <tagName>删除一个本地标签 ,git push origin :refs/tags/<tagName>删除一个远程标签(本地先删除)。git fetch --all && git reset --hard origin/master && git pull强拉远程
常用高级命令
git update-index --assume-unchanged /path/file可以忽略这个文件的修改,从而不用提交到库里面。对应使用git update-index --no-assume-unchanged /path/file来恢复跟踪。git reset --hard origin/main远程分支强制覆盖本地git branch -r查看远程分支;git checkout -b xxx origin/xxx拉取远程xxx分支到本地xxx分支,xxx为分支名


