Git库在本地有三部分组成:工作区,索引区(临时的存储区域),仓库。用户新增、修改等过程都是在工作区 ,用户通过 add 命令增加的文件都会在索引区中,用户通过 commit 命令提交的文件都会在 仓库 中。
使用git时,为了方便操作,会先配置个人信息——配置用户名,用户邮箱:
# 配置全局用户名、配置全局邮件地址(全局意味着本地的所有仓库,若没有参数 --global则仅配置当前仓库)
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
而后会关联本地仓库并与远程仓库:
# 1.创建本地仓库后,添加远程仓库
$ mkdir your_repository # 创建一个空目录 (并非一定是空目录,建议如此)
$ cd your_repository
$ git init # 创建本地仓库
# origin 是给远程库 git@github.com:xxx/xx.git 定义的名称,可用别的名字代替
$ git remote add origin git@github.com:xxx/xx.git
# 2.无本地库,直接从远程库克隆
$ git clone origin git@github.com:xxx/xx.git
新增、修改文件后,将文件提交至索引区
$ git add * # (所有改动文件都将被增加至索引区)
$ git add *.py #(所有改动过的以.py结尾命名的文件都会被增加至索引区,以此类推)
$ git add filename # (filename 会被增加至索引区)
$ git add filename1 filename2 # (filename1和filename2会被增加至索引区,以此类推)
工作区恢复
有时候需要对当前工作区的改动恢复到未改动的状态,那么:
$ git checkout -- <filename>
撤销已提交至索引区的文件
对文件 a.py 程序做了改动,执行:
$ git add a.py
发现 a.py 仍存在bug,需撤销提交至索引区:
git reset HEAD a.py
索引区文件提交至仓库
# -m 参数后为 提交内容的说明 方便以后跟踪文件改动的内容
$ git commit * -m "comment" # (所有改动文件都会被提交至仓库)
$ git commit *.py -m "comment" #(所有改动过的以.py结尾命名的文件都会被提交至仓库,以此类推)
$ git commit filename -m "comment" # (filename 会被提交至仓库)
$ git commit filename1 filename2 -m "comment" # (filename1和filename2会被提交至仓库,以此类推)
版本回退
如果对a.py的文件已经commit 了,而此刻需要上一个版本,或者上几个版本的文件,那么:
$ git reflog
af8d38c HEAD@{1}: commit: 通用转移数据脚本
17ab7ea HEAD@{2}: commit: 提交造数据脚本的配置脚本
ad548ee HEAD@{3}: commit: 适用于mysqldb的造数据脚本
$ git reset --hard 17ab7ea # 17ab7ea 是 commit_id, 命令git reflog 返回的第一列
HEAD is now at 17ab7ea 提交造数据脚本的配置脚本
操作分支
查看当前分支(带*号的表示当前分支)
$ git branch
* dev
master
创建分支 dev2
$ git branch dev2
切换分支到 dev2
$ git checkout dev2
创建dev并切换分支为dev
$ git checkout -b dev
删除分支dev2
合并分支dev2到当前分支
$ git merge dev2
合并分支dev2到当前分支(强制禁用Fast forward模式——当分支被删除后,分支的信息可以被找到,若不禁用,则无法被找到)
$ git merge --no-ff -m "merge with no-ff" dev2
删除未被合并过的分支 dev3
$ git branch -D dev3
保存当前工作区
开发新功能时,发现上一版本的bug,那么需要保存当前工作区
$ git stash
而后在上一版本切分支,修复缺陷完事后,恢复当前工作区
$ git stash pop #
上述 git stash pop 也可以用一下命令代替:
$ git stash apply # 此时用 $ git stash list命令查看,工作区是有东西的
$ git stash drop # 此时用 $ git stash list命令查看,工作区是空的
注:带“$”号的为命令