# git常用命令,及.gitignore的配置
# 快捷通道
- git add . (将新建的纳入git管理)
- git status (查看文件在git仓库中的状态)
- git commit -m "提交修改的信息说明" (完成了首次提交)
- git push (Git会把master分支推送到远程库对应的远程分支上)
- git pull (拉取更新)
- git fetch --all
- git push origin 当前分支名:远程新的分支名
# 处理问题
问题提示 | 问题原因 | 解决办法 |
---|---|---|
git push github失败,提示:SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 | 发现是因为Git的Http代理的问题,Git支持三种协议:git://、ssh://和http://,本来push的时候应该走ssh隧道 (opens new window)的,但是因为设置了http代理,所以就走了http的代理,于是就提交不了了。 OK,找到原因了,那就取消http代理吧 | 在代码目录执行git config --global --unset http.proxy就可以了 |
Windows git:致命:遇到TaskCanceledException? Fatal: TaskCanceledException encountered. | git config --list --system git config --list --global 设置下方命令 git config --system --unset credential.helper | |
要很好的掌握Git,先要明白四个名词概念:
- Workspace(工作区):新添加的,和修改的未add操作的。
- Stage(暂存区):add操作过后,会进入暂存区。
- Repository(本地仓库):commit操作后,会进入本地仓库。
- Remote(远程仓库):push操作后,会提交到远程仓库。
# Git的配置
# 显示当前的Git配置
$ git config --list #设置用户名和邮箱,即提交代码时的用户信息 $ git config [--global] user.name "[name]" $ git config [--global] user.email "[email address]"
# Git操作
# 添加/删除文件(add)
#可以添加一个或多个 $ git add ... #添加所有修改的和新添加的 $ git add . #另一种写法 $ git add -A #添加指定目录 $ git add #由暂存区恢复到工作区(发现提交错了,退回一步) $ git reset HEAD #恢复上一次add提交的所有file $ git reset HEAD #撤销修改操作,恢复到修改之前的,撤销add后位于工作区下进行的 $ git checkout -- #删除文件,并将文件放入暂存区 $ git rm #改文件名,并将修改后的文件放入暂存区 $ git mv
# 提交到本地仓库(commit)
#提交暂存区的所有文件(后面的message不可缺少) $ git commit -m #提交暂存区的指定文件 $ git commit -m
# 分支操作(branch)
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name] #从远程分支检出指定分支 $ git clone -b
# 合并指定分支到当前分支(主分支合并自定义分支)
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name] $ git branch -dr [remote/branch]
# 查看信息
# 显示有变更的文件
$ git status
# 显示当前分支的版本历史
$ git log
# 远程同步
# 下载远程仓库的所有变动
$ git fetch [remote]
# 显示所有远程仓库
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show [remote]
# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
# 上传本地指定分支到远程仓库
$ git push [remote] [branch]
# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force
# 推送所有分支到远程仓库
$ git push [remote] --all
#### git 推送本地分支到远程分支 git push origin
推送本地分支local_branch到远程分支 remote_branch并建立关联关系
- a.远程已有remote_branch分支并且已经关联本地分支local_branch且本地已经切换到local_branch
git push
- b.远程已有remote_branch分支但未关联本地分支local_branch且本地已经切换到local_branch
git push -u origin/remote_branch
- c.远程没有有remote_branch分支并,本地已经切换到local_branch
git push origin local_branch:remote_branch
# 标签(tag)
# 列出所有tag
$ git tag
# 新建一个tag在当前commit
$ git tag [tag]
# 新建一个tag在指定commit
$ git tag [tag] [commit]
# 删除本地tag
$ git tag -d [tag]
# 删除远程tag
$ git push origin :refs/tags/[tagName]
# 查看tag信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] --tags
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]
# 其他
# 生成一个可供发布的压缩包
$ git archive
# .gitignore
# .gitignore的配置
/build /.idea /.gradle /local.properties .gitignore
# 用法规则和语义
# 此为注释 – 将被 Git 忽略
.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目录下的所有文件 doc/.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
# Commit message 和 Change log
# commit规范
本文介绍Angular 规范(见上图)
每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
其中,Header 是必需的,Body 和 Footer 可以省略。
不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。
# Header
Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。
**type--**用于说明 commit 的类别,只允许使用下面7个标识。
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- chore:构建过程或辅助工具的变动
如果type为feat和fix,则该 commit 将肯定出现在 **Change log **之中。其他情况(docs、chore、style、refactor、test)由你决定,要不要放入 Change log,建议是不要。
**scope--**用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
**subject--**是 commit 目的的简短描述,不超过50个字符。
- 以动词开头,使用第一人称现在时,比如
change
,而不是changed
或changes
- 第一个字母小写
- 结尾不加句号(
.
)