学习笔记 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 checkout
git 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为分支名