1. Git基础知识
Git是一个免费、开源的分布式版本控制系统,可以高效的对大/小项目进行版本管理。
Git有四个工作区域:
工作目录(Working Directory)
暂存区(Stage/Index)
资源库(Repository或Git Directory)
远程库(Remote Directory)
前三个的管理都是在本地,四个区域的关系如图:
2. Git配置
Git 全局设置
$ git config --global user.name "name"
$ git config --global user.email "email"
Git Status 中文乱码
$ git config --global core.quotepath false
Git bash 中输入乱码
\Git\etc\inputrc文件
set output-meta on
set convert-meta off
Git 提交、日志 编码格式
$ git config --global i18n.commitencoding utf-8
$ git config --global i18n.logoutputencoding gbk
Linux中,使用ls乱码
ls --show-control-chars
可以编辑 C:\Git\etc\git-completion.bash 文件,添加如下一行:
alias ls="ls --show-control-chars"
SSH证书
生成:
$ ssh-keygen -t rsa -C “your email”
按3个回车,密码为空。
最后得到了两个文件:id_rsa和id_rsa.pub
Windows系统,在用户下面的.ssh目录下,
Linux系统,在home/.ssh目录下,这是隐藏目录,打开隐藏目录快捷键“ctrl”+“h”。
就可以把生成的ssh证书添加到oschina、code.aliyun等git服务器上。
3. Git基础使用
官网入门教程
创建 Git 仓库:
mkdir gitstudy
cd gitstudy
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin xxx.git
git push -u origin master
已有项目:
cd existing_git_repo
git remote add origin xxx.git
git push -u origin master
git remote
添加:git remote add [branchname] [url]
例如:git remote add origin "xxx.git"
删除:git remote rm [remote-name]
.gitignore 文件
在工作区域,添加.gitignore文件,Windows默认不能添加.xx文件,需要在终端新建:
在工作区域打开终端,输入:
$ touch .gitignore
然后就可以用编辑器打开这个文件,或者用vim直接在终端编辑。
内容格式:
file ---忽略file文件
cd/* ---忽略目录cd下的全部内容
*.tar.gz ---忽略所有的以.tar.gz结尾的文件
git status
比较index区与working区
git add
add对象表示,把“Working”区添加到“index”区。
add前,修改或新建的文件为红色状态,add后,变为绿色状态。
git add file (单一文件添加到本地index区)
git add file_1 file_2 (多个文件添加到本地index区)
git add . (把修改或新建的内容全部添加到本地index区)
git commit
commit对象表示,把“index”区添加到“history”区。
git commit -m "message"
git commit -am "commit message"
(注意a的使用,它会提交所有文档,包括未add的红色文件,会直接添加到history区,这是一个坑)
git push
push对象表示,把“history”区添加到“remote”区。
git push [origin] [branch]
例如:
git push origin develop
git branch
查看分支
$ git branch
列出本地git库中的所有分支
$ git branch -a
列出本地git库和远程git库中的所有分支
会有下面输出:
前面带*号表示,当前分支,romotes/代表远程分支。
develop
- develop-song
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/develop-li
remotes/origin/develop-song
remotes/origin/develop_other
在当前分支下,新建分支:
git branch [branch_name]
例如:
在develop分支下新建develop-song分支,并调到develop-song分支下:
$ git branch develop-song
$ git checkout develop-song
简化:
$ git checout –b 分支名
不但创建了分支,还将当前工作分支切换到了该分支上。
删除分支
删除本地分支:
git branch -d [branch_name]
git branch -D branch_name
删除远程分支
$ git push origin --delete
git log
查看历史日志,包含每次的版本变化。每次版本变化对应一个commit id。
Git log -1
-1的意思是只显示一个commit,如果想显示5个,就-5。
不指定的话,git log会从该commit一直往后显示,按q键退出。
git checkout
切换到某个分支
本地已存在分支,切换分支:
$ git checkout 分支名
导入远程分支到本地
本地未存在分支,远程存在的分支,导入本地:
$ git checkout 分支
从working区返回
如果失误修改了某个文件,把红色状态的文件修改为和服务器一样。
$ git checkout file
git reset
从index区到working区
简单的说就是从绿色变为红色:
git reset -q file
从history区到index
简单的说是commit之后,未push到远程的文件,回滚到绿色状态
git reset --soft HEAD^
git stash
git stash
备份当前的工作区的内容,将当前的工作区内容保存到Git栈中。
git stash pop
从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复.
git stash list
显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear
清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
git merge
合并分支
方法一:
git merge [origin] [branch_name]
合并分支branch_name到当前分支。
方法二:
git merge “注释” 合并的目标分支 合并的来源分支
方法三:
git pull 合并的目标分支 合并的来源分支
例如:
git checkout master (切换到master分支)
git pull . dev2(合并当前分支和dev2分支)
其他
查看当前分支的操作记录
git whatchanged
获取master的最新更改
git checkout master
下载项目的最新更改
git pull 远端 分支名称 -u
正常开发流程
创建master分支
基于remote/master分支,创建自己的开发分支(develop)。
基于自己的开发分支修改,并提交。
开发测试。
提交合并请求。
版本发布。