git 默认不区分文件名大小写,用下面命令配置严格区分大小写
$ git config core.ignorecase false
# 新建一个本地分支
$ git checkout -b v2
# 把新建的本地分支push到远程服务器,我这次的提交,远程分支与本地分支同名
$ git push origin v2:v2
# 删除本地分支
$ git branch -D 要删除的分支名称
# 删除远程分支
$ git push origin --delete 要删除的分支名称
git clone 只能 clone远程库的 master 分支,无法 clone 所有分支,解决办法如下:
- git clone https://github.com/fightingljm/myapp.git
这样在 Desktop 目录下得到一个 myapp 子目录
- cd myapp
- git branch -a
列出所有分支名称如下:
* 0.1.0
master
remotes/origin/0.1.0
remotes/origin/HEAD -> origin/master
remotes/origin/master
- git checkout -b dev origin/dev
checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
- git checkout -b release origin/release
(同理)checkout远程的release分支,在本地起名为release分支,并切换到本地的release分支
- git checkout dev
切换回dev分支,并开始开发。
分为三种情况:
-
还未将变更从工作区加入到暂存区,即未执行
git add
命令前,可以使用git checkout
命令来撤销修改$ git checkout -- a.scss b.scss $ git checkout -- *.css $ git checkout -- *
-
已将变更加入到暂存区,即已经执行了
git add
命令,可以使用git reset
命令来撤销修改$ git reset HEAD a.scss b.scss $ git reset HEAD *.scss $ git reset HEAD *
执行以上命令后,本地的修改并不会消失,而只是从暂存区回到了工作区,即第一种情况下所示的状态。继续用第一种情况下的操作,就可以放弃本地的修改
-
已经将代码提交到本地仓库,即已经执行
git commit
命令,此时工作区已经clean,若想撤销之前的修改,需要执行版本回退操作:#回退到上一个版本 $ git reset --hard HEAD^ #回退到上上次版本 $ git reset --hard HEAD^^ $ git reset --hard HEAD^^^ #回退到指定commitid的版本 $ git reset --hard commit_id
可以使用
git log
或git reflog
命令来查看git的提交历史,获取commit_id.
步骤:
也就是将你 fork 的项目的地址给配置到自己的项目上。 比如我 fork 了一个项目,原项目是 wolf/fork-demo.git,我的项目就是 wolf_liu/test-demo.git。 使用以下命令来配置。
$ git remote add upstream git@gitlab.zoo.cn:wolf/fork-demo.git
然后可以查看一下配置状况,很好,上游项目的地址已经被加进来了。
$ git remote -v
origin git@gitlab.zoo.cn:wolf_liu/test-demo.git (fetch)
origin git@gitlab.zoo.cn:wolf_liu/test-demo.git (push)
upstream git@gitlab.zoo.cn:wolf/fork-demo.git (fetch)
upstream git@gitlab.zoo.cn:wolf/fork-demo.git (push)
使用 fetch 命令更新,fetch 后会被存储在一个本地分支 upstream/master 上。
$ git fetch upstream
切换到 master 分支,合并 upstream/master 分支。
$ git merge upstream/master
根据自己情况提交推送自己项目的代码。
$ git push origin master
由于项目已经配置了上游项目的地址,所以如果 fork 的项目再次更新,重复步骤 2、3、4即可。
提交信息包括三个部分:Header,Body 和 Footer。
<Header>
<Body>
<Footer>
其中,Header 是必需的,Body 和 Footer 可以省略。
####Header
Header部分只有一行,包括俩个字段:type(必需)和subject(必需)。
<type>: <subject>
type用于说明 commit 的类别,可以使用如下类别:
- feat:新功能(feature)
- fix:修补bug
- doc:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- chore:构建过程或辅助工具的变动
subject是 commit 目的的简短描述。
- 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
- 第一个字母小写
- 结尾不加句号(。)
Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。
More detailed explanatory text, if necessary. Wrap it to
about 72 characters or so.
Further paragraphs come after blank lines.
- Bullet points are okay, too
- Use a hanging indent
注意:应该说明代码变动的动机,以及与以前行为的对比。
Footer 部分只用于两种情况:
- 关联 Issue
- 关闭 Issue
本次提交如果和摸个issue有关系则需要写上这个,格式如下:
Issue #1, #2, #3
如果当前提交信息解决了某个issue,那么可以在 Footer 部分关闭这个 issue,关闭的格式如下:
Close #1, #2, #3
说了半天不给个例子都是瞎扯淡,下面是一个完整的例子:
feat: 添加了分享功能
给每篇博文添加了分享功能
- 添加分享到微博功能
- 添加分享到微信功能
- 添加分享到朋友圈功能
Issue #1, #2
Close #1
emoji | emoji 代码 | commit 说明 |
---|---|---|
🎨 (调色板) | 🎨 | 改进代码结构/代码格式 |
⚡ (闪电)🐎 (赛马) | ⚡“🐎 | 提升性能 |
🔥 (火焰) | 🔥 | 移除代码或文件 |
🐛 (bug) | 🐛 | 修复 bug |
🚑 (急救车) | 🚑 | 重要补丁 |
✨ (火花) | ✨ | 引入新功能 |
📝 (备忘录) | 📝 | 撰写文档 |
🚀 (火箭) | 🚀 | 部署功能 |
💄 (口红) | 💄 | 更新 UI 和样式文件 |
🎉 (庆祝) | 🎉 | 初次提交 |
✅ (白色复选框) | ✅ | 增加测试 |
🔒 (锁) | 🔒 | 修复安全问题 |
🍎 (苹果) | 🍎 | 修复 macOS 下的问题 |
🐧 (企鹅) | 🐧 | 修复 Linux 下的问题 |
🏁 (旗帜) | 🏁 | 修复 Windows 下的问题 |
🔖 (书签) | 🔖 | 发行/版本标签 |
🚨 (警车灯) | 🚨 | 移除 linter 警告 |
🚧 (施工) | 🚧 | 工作进行中 |
💚 (绿心) | 💚 | 修复 CI 构建问题 |
⬇️ (下降箭头) | ⬇️ | 降级依赖 |
⬆️ (上升箭头) | ⬆️ | 升级依赖 |
👷 (工人) | 👷 | 添加 CI 构建系统 |
📈 (上升趋势图) | 📈 | 添加分析或跟踪代码 |
🔨 (锤子) | 🔨 | 重大重构 |
➖ (减号) | ➖ | 减少一个依赖 |
🐳 (鲸鱼) | 🐳 | Docker 相关工作 |
➕ (加号) | ➕ | 增加一个依赖 |
🔧 (扳手) | 🔧 | 修改配置文件 |
🌐 (地球) | 🌐 | 国际化与本地化 |
✏️ (铅笔) | ✏️ | 修复 typo |