Git相关操作

常规操作

  • git add :提交的更改,-A 提交所有更改,. 提交当前路径下的修改,提交该路径下的所有修改
  • git pull:将远程仓库中的代码拉至本地并合并(=git fetch +git merge
  • git status:查看当前工作区状态,用于查看修改、删除等改动
  • git diff:查看工作目录中当前文件和暂存区域快照之间的差异
  • git log:查看历史commit日志记录
  • git commit -m "commit msg":将暂存区中的更改提交至分支,-m 添加描述
  • git branch -b :创建分支
  • git push origin ::本地修改推送到远端,若本地分支与远程分支名一致,可简化为git push。加-f可以将已经提交的远程版本覆盖掉。(本地commit时需git commit --amend,见下文)
  • git checkout :切换到分支,若远端有分支,则自动关联远端分支并拉至本地
  • git checkout -b origin/:将远程分支拉至本地并创建,若远程分支与本地分支名一致,可简化为git checkout
  • git fetch:拉取远端的最新repo信息,若提示fatal: 'origin/xxx' is not a commit and a branch 'xxx' cannot be created from it时可以用git fetch抓取远端最新的branch、tag信息,再执行git pullgit checkout 就可以了

稍微高级一点的操作

  • git merge :在当前分支上将分支合并进来,原理见下方merge原理。
  • git reset HEAD:将工作区改动恢复到最新的commit状态,所有added的改动会恢复为modified。若不再需要这些改动,可加--hard删除所有改动,恢复为clean的最新分支状态。若需回退n个commit,可在HEAD后加n个^,例如:git reset --hard HEAD^,清除所有改动并回退至上一个commit
  • git clean -nf-n用于查询将删除的untracked文件,-f 删除untracked文件,-d连目录一起删除,不加-n直接删除
  • git commit --amend --no-edit:在上一次commit的基础上覆盖提交,会改写上次commit的内容,并保持commit message不变,不加—no-edit可以连commit message一起修改(git commit –amend -m “commit msg”
  • git branch -m :更改本地分支名
  • git diff > patch:将代码修改部分生成为patch文件
  • git apply patch:将patch应用到当前commit
  • git branch --set-upstream-to=origin/:关联远程分支
  • git branch :当git checkout 进入detached HEAD的时候,可以用git branch < new branch name >将当前HEAD拷贝进新的分支
  • git clone [email protected]:将远程仓库中的代码克隆至本地,注意要用远程仓库的ssh链接。
  • git remote -v:查看远程repo
  • git remote add :添加repo并关联为,例如,git remote add origin [email protected],添加远程repo并命名为origin
  • git remote rm :删除对应的远程repo
  • git branch -a --contains "":查询对应是否在repo的某个branch中,-a参数为在远端及本地查询,不加-a为本地查询
  • git checkout -- [file name]checkout 分支的部分文件,可用于同步两个分支的部分文件改动

参考教程:

  1. https://git-scm.com/docs
  2. https://www.liaoxuefeng.com/wiki/896043488029600

删除submodule

To remove a submodule you need to:

  1. Delete the relevant section from the .gitmodules file.
  2. Stage the .gitmodules changes git add .gitmodules.
  3. Delete the relevant section from .git/config.
  4. Run git rm --cached path_to_submodule (no trailing slash).
  5. Run rm -rf .git/modules/path_to_submodule.
  6. Commit git commit -m "Removed submodule ".
  7. Delete the now untracked submodule files.
  8. rm -rf path_to_submodule.

参考资料:https://gist.github.com/myusuf3/7f645819ded92bda6677

git merge原理

三路合并:

分支A merge 分支B之前,git会先找出分支A和B的一个基准,然后以基准为Base进行合并,例如:A和B的上一个commit均为C,对于x文件的第n行,A相对于C没有修改,而B相对于C做了修改,则git会采用B的修改。如果同一行相对C都发生了改变,那git就会报冲突,然后由用户自己决断。总结一下就是,git会取相对于基准变化的那个为最终结果。

递归三路合并:

上面对应的是理想情况,实际情况是分支A和B可能有多个共同祖先,在共同祖先非唯一的情况下,git会递归向前寻找一个真实存在的共同祖先,使得共同祖先唯一。

快进式合并(fast forward):

快进式合并要求合并的两个分支(或提交)必须是祖孙/父子关系。fast forward时,git直接将父分支的HEAD指向子分支的最新提交即完成了合并。

参考资料:

  1. https://blog.csdn.net/u012937029/article/details/77161584
  2. https://blog.walterlv.com/post/git-merge-principle.html

你可能感兴趣的:(Git相关操作)