Git 常用命令笔记 + 心得

2023-09-05 15:47:39 浏览数 (1)

学习笔记 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 commitgit add时的状态,即撤销该文件所有修改(相对于最新一次的git commitgit add)。

如果文件错误更新后,并git add了,那么上面的checkout命令已经不能回退到git add之前了,可以使用git reset HEAD <fileName>撤销掉暂存区的修改,

然后使用git checkout -- <fileName>恢复。

如果不仅git add了,同时 git commit了,使用上文提到的

git reset --hard <commitId> 进行版本回退/前进

git checkout其实是用版本库里的版本替换工作区的版本 git checkout <branchName> 切换分支,会重写工作区,也就是检出单个文件的原理所在。那么就很好理解接下来的这一条:git checkout <commitId> -- /path/<fileName>/git checkout <branchName> -- /path/<fileName>还原某个commit版本/分支的某个文件

强制拉取覆盖本地

代码语言:javascript复制
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.gitgit 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为分支名

0 人点赞