Git 基本命令
-
git init
初始化仓库 -
git clone
克隆仓库 -
git config --global --list
查看全局 git 配置 -
git config --local --list
查看本地 git 配置-
git config --local user.name <userName>
设置用户名 -
git config --local user.email <userEmail>
设置用户邮箱
-
开发流程
-
git status
查看仓库文件状态 -
git diff
查看修改内容-
git diff <$id1> <$id2>
比较两次commit之间的差异 -
git diff <branch1> <branch2>
比较两个分支之间的差异 -
git diff --staged
比较暂存区和版本库之间的差异
-
-
git add <fileName>
将文件添加至提交列表-
git add .
添加所有文件
-
-
git commit -m"XXX"
说明本次的提交信息-
git commit --amend
更改还没有提交到远程项目的提交信息 -
git commit --no-verify –m"XXX"
跳过 pre-commit 钩子校验 - Angular git 提交规约:
- feat:一项新功能
- fix:一个错误修复
- docs:仅文档更改
- style:不会影响代码含义的更改(空格,格式,缺少分号等)
- refactor:既不修正错误也不增加功能的代码更改
- perf:代码更改可提高性能
- test:添加缺失的测试或更正现有的测试
- build:影响构建系统,CI 配置或外部依赖项的更改(比如:gulp,npm)
- chore:其他不会修改 src 或测试文件的更改(比如文档修改,构建流程)
- release:发布版本提交
-
-
git cherry-pick <commitId>
将某一次 commit 合并到本地- 前提是被 pick 的 commit 需要已经存在于本地,如果该 commit 存在于其他人的分支,那也要把分支一同 pull 下来(跨 fork 项目也同理)
- 详情参考:is-it-possible-to-cherry-pick-a-commit-from-another-git-repository
-
git push
推送到远端服务器 -
git pull
获取远端最新代码-
git pull origin 远程分支名:本地分支名
获取远端分支到命令行所在分支(例如 git pull origin master)
-
-
git fetch 和 git pull 的区别
-
git fetch
也是获取代码的命令,它是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支 - 而
git pull
则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决
-
fork 工作流
github 的 fork 工作流需要手动增加远端 fork 的原项目地址,才能进行代码拉取
- 使用
git remote add [upstreamName] [gitURL]
增加项目源地址 - 使用
git remote remove [upstreamName]
删除某个源地址 - 使用
git remote -v
查看当前源地址是否添加成功 - 使用
git pull [upstreamName] [branchName]
获取源项目某一分支的更新- 若合并时报错
fatal: refusing to merge unrelated histories
,在 git pull 后边增加--allow-unrelated-histories
参数即可 - 注意:若合并远端分支代码后出现了大量的冲突,查看是否是上游项目地址设置错误
- 更多 fork 项目同步的方式(参考)
- 若合并时报错
Tips:
- 每天早上或者晚上 进行 git pull origin master 使自己的代码保持在最新状态;
- 下班前最好进行一次完整的提交,避免电脑硬盘故障带来的代码丢失。
分支操作
-
git branch
查看分支及所在分支情况(默认是主分支master)-
git branch <branchName>
新建分支 -
git branch -d <branchName>
删除远端分支 -
git branch -D <branchName>
删除本地分支 -
git branch -m < branchName >
重命名某一分支 -
git branch -u <upstream>/<branchName>
让当前分支去追踪远端某一分支
-
-
git checkout <branchName>
切换到某分支 -
git checkout -b <branchName>
新建并切换分支-
git checkout -b 新分支名 老分支名
基于老分支创建新的分支
-
-
git merge <branchName>
将某分支合并到当前命令行所在分支 -
git rebase -i HEAD~3
合并最近三次提交(主要用于合并多余提交信息、代码)
各种撤销操作
-
git log
显示所有提交过的版本信息 -
git relog
查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作) -
git checkout <filename>
对于还没有进行git add的更改,可以使用checkout进行撤销改动,直接把文件还原(若是已经add了的,则用:git reset HEAD index.html)-
git checkout .
插销全部操作
-
-
git reset --hard <HASH>
回退到某一节点,不保留当前修改 -
git reset --soft <HASH>
返回到某个节点,保留当前修改- git push --force 来强制将当前 reset 的代码推送到远端服务器(高危操作,谨慎操作)
- git add . 误操作增加了多余的文件,使用
git reset <filename>
来撤销增加的文件
-
git revert <HASH>
撤销某次操作。与 reset 不同的是:git revert 会撤销指定版本,撤销也会作为一次提交进行保存( git reset 是直接删除指定的 commit, mr 时可能会有冲突,而git revert是进行新一次的提交,只不过要提交的内容与 revert 内容相反,故不会产生冲突)。- 当需要撤销一次 master merge 时,尽量不要使用 git revert
-
git clean
删除工作目录中所有没有tracked过的文件-
git clean -n
显示 将要 删除的 文件 和 目录、 -
git clean -f
删除文件 -
git clean -df
删除文件和目录
-
- 将本地分支恢复为远程分支的状态
-
git reset --hard origin/master
origin/master替换为想恢复的分支名称,示例中默认的是主分支
-
暂时存储本地修改而不提交
-
git stash
暂时将现有的更改保留到栈中 -
git stash list
查看栈中存储的版本 -
git stash apply stash@{n}
恢复栈中第n条暂存结果-
git stash apply
默认恢复第一条
-
-
git stash show stash@{n}
显示第几个储存的变动 -
git stash pop
从 git 栈中获取最近一次 stash 进去的内容,恢复工作区内容-
git stash apply
以及git stash pop
都可以恢复暂存区内容,只是 git stash apply 不会删除 git stash list 里的记录,而 git stash pop 会删除记录;
-
-
gi stash drop stash@{n}
删除栈中第n个存储 -
git stash clear
删除栈中所有内容
其他
-
git remote -v
查看当前仓库链接的远程仓库 - Github 上下载的zip项目,关联到远程仓库(待验证)
- git init
- git remote add origin https://github.com/yourName/projectName.git
- git push -u origin master
配置git警告转换成英文(Mac下)
- 普通的命令行:
echo "alias git='LANG=en_GB git'" >> ~/.bashrc
- 安装了ZSH的命令行:
echo "alias git='LANG=en_GB git'" >> ~/.zshrc
配置zsh支持显示中文
在 .zshrc
中加入下边两句
- export LC_ALL=en_US.UTF-8
- export LANG=en_US.UTF-8
Hooks
git hooks 是 git 提供的钩子,即某些动作发生时用户可以自定义脚本;
当项目执行 git init
的时候,一些钩子相关的示例甲苯已经被放入了 .git\hooks
中。示例都以 .sample
结尾,若启用,则需要移除此后缀。
客户端钩子-提交工作流
- pre-commit 钩子在键入提交信息前运行,可以使用
--no-verify
跳过校验 - prepare-commit-msg 在提编辑信息之前(如合并操作)
- commit-msg 提交信息校验
- post-commit 提交完成后运行
- pre-rebase 变基之前
- pre-push 推送代码期间的操作
电子邮件相关钩子
- post-applypatch 将结果通知给打补丁的作者
更多钩子可参见:git 官网文档
网友评论