GIT常用总结

253 阅读5分钟

git文件状态

  1. 已修改(工作区)
  2. 已暂存(暂存区)
  3. 已提交(版本库)

git配置

  1. /etc/gitconfig(几乎不用) git config --system
  2. ~/.gitconfig(常用) git config --global
  3. .git/config文件中 git config --local
  4. 删除配置 git config -unset <key>

git commit --amend --reset-author

修改commit的message omend

git commit --amend -m '最新message'

好的工具推荐

oh-my-zsh

git分支管理及git常用

  1. 分支列表 git branch
  2. 创建分支(新分支内容与当前分支一样) git branch 分支名称
  3. 分支切换 git checkout 分支名称
  4. 两个分支来回切换 git checkout -
  5. 创建分支同时切换到新分支 git checkout -b 新分支名称
  6. 删除分支 git branch -d 分支名称
  7. 删除分支时候,如果待删除分支有修改没有合并到其他分支上(not fully merged),删除分支需要用-D,git branch -D 分支名称
  8. 查看当前分支的最新一次提交 git branch -v
  9. 图形化查看日志 git log --graph
  10. git add . + git commit -m(仅针对版本库的文件,新增不可以) git commit -am '文本'
  11. git 分支改名 git branch -m <历史分支名> <新分支名>
  12. 查看文件近一次修改记录 git blame <文件名>

diff

-代表源文件,+表示目标文件,常用diff指令diff -u <源文件> <目标文件>

  1. 比较工作区与暂存区的区别 git diff
  2. 比较工作区与最新一次提交的差别 git diff HEAD
  3. 比较暂存区与最新一次提交(版本库)的差别 git diff --cached

git merge

  1. 将其他分支的修改合并到当前分支 git merge 待合并分支名称
  2. 禁用fast-forward,使用参数 --no-ff

分支

分支概念

一个commit对象链:一条工作记录线。 有一个parent属性值,记录上一次提交值

HEAD

HEAD指向当前分支;master指向提交

HEAD文件内部存的是指向另外一个引用的指针

修改HEAD文件 git symbolic-ref HEAD refs/heads/...

基于git分支开发模块

版本回退 git reset --hard

  1. 回退到上一个提交 git reset --hard HEAD^
  2. 回退到上两个提交 git reset --hard HEAD^^
  3. 回退到某个commit id(前面几位就可以了) git reset --hard <commit_id>
  4. 查看操作日志 git reflog
  5. 通过checkout(detached HEAD, 游离状态) git checkout <commit_id>

    但是需要用新的分支保存修改 git chekcout <新的分支> <commit_id>

远程版本库

  1. 本地添加远程仓库 git remote add origin <远程仓库地址>
  2. 本地master与远程做关联-u git push -u origin master
  3. 查看对应的远程仓库 git remote show
  4. 查看远程仓库详细信息 git remote show origin

push, pull, fetch

pull == fetch + merge

push除了会推送代码,还会同时更新origin/master的指向

git push完整:git push origin <本地分支名>:<远程分支名>

git pull完成:git pull origin <远程分支名>:<本地分支名>

git协作及远程分支

  1. 查看所有分支,包括远程分支 git branch -a
  2. origin/master概念
  3. 三方合并
  4. 从远程非master分支拉新分支
    • git checkout -b <新分支名> origin/<远程分支名>
    • git checkout --track origin/<远程分支名称>
  5. 本地推送并创建远程分支
    • git push -u origin <远程分支名>
    • git push --set-upstream origin
  6. 删除远程分支
    • git push origin :<远程分支名>
    • git push origin --delete <远程分支名>
  7. 重命名远程分支,目前只能先删除远程分支,在重新推送
  8. 删除本地存着的无效的origin分支 git remote prune origin
  9. 查看远程分支日志 git log origin/<远程分支名>

commit 对象

当执行git commit时,git会创建一个commit对象,并且这个commit对象的parent指针设置为HEAD所指向的引用的SHA-1值

git refspec

git别名

语法如下 git config --local alias.<别名> <原名>

e.g. git config --global alias.br branch

gitk和git gui

git图形工具

git tag

  1. 标签创建 git tag <标签名称>
  2. 查看标签 git tag
  3. 标签推送至远程 git push origin --tags
  4. 标签拉取 git pull
  5. 删除远程标签 git push origin :<refs/tags/标签名>

git gc

git裸库与submodule, git submodule有弊端

  • git裸库是没有工作区的,远程服务器端,创建裸库 git init --bare
  • 将一个他git引入到本git git submodule add <git地址,e.g. git@github.com:xxx> <新模块名称>
  • 一次更新所有子模块 git submodule foreach git pull
  • 克隆方式变更 git submodule init && git submodule update --recursive

git subtree 推荐

针对双向修改,更为优秀

git cherry-pick

将对某个分支的修改(提交),应用到另外一个分支,是用在本地分支的 git cherry-pick <commit-id>

git rebase

rebase:变基衍合,改变分支的根基,功能是将两个分支的内容合并到一起,类似merge

但是merge是三方合并(有分叉), 而rebase是将一个分支的应用到另外一个分支上,执行完以后是直线, rebase可以随时终止, 但是他会修改原来的git历史

rebase 基本操作 git rebase <分支名> && git rebase --continue && git rebase --abort

** 不要对master进行rebase,且适合做rebase操作的分支都是本地分支,没有执行过推送远程版本库的分支**

.gitignore

git私服gitlab的搭建方式

阿里云ECS

gitlab部署