git的使用
1. git基础
第一次使用git前的配置
配置用户名和邮箱,每次Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录。例子如下:
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
git config 的选项有:
- –global 表示全局的配置,去掉该选项表示在当前库进行配置
- -l or --list 展示配置
克隆远端仓库
git clone url
查看clone到本地的库中的文件状态
git status
git statu 展示的更改类型有以下几种:
-
尚未跟踪的文件,即没有加入到版本控制的文件
-
尚未暂存(stage)以备提交的变更,即没有放入暂存区的变更
-
需提交的变更,即已经暂存的变更,即已经放入暂存区的变更,且可以提交给分支的变更
查看历史提交记录
使用git log可以查看本地库的提交记录(即还没有push到远程库的更改,进为commit到本地库的更改) + 远程库的提交记录。gitlog的选项有很多,详见参考文献4。
git log
git log --pretty=oneline # 展示简略的log
git log file #仅仅查看某个文件的commit记录
另外,git reflog [file]可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录.
提交更改
提交更改到本地库
无论是尚未跟踪的文件或者尚未暂存的变更,使用如下命令进行提交更改:
git add file
git commit -m '提交注释'
而对于已经暂存的变更,直接使用如下命令进行提交变更:
git commit -m '提交注释'
提交更改到远程库
例子如下,其中在push之前,推荐必须pull一下,因为假设远程库有别人新提交的更新,你木有pull下来的话,直接push你自己的更改会报错的。
# 先把更改提交到本地库
# 可参考提交更改到本地库的命令
# 然后先pull 再 push到远程库
git pull origin master # 先进行pull(同步或者说拉取)
git push origin master # 再进行推送
.gitignore的使用
对于一个.gitignore文件,用于排除掉不需要提交的文件或者文件夹,如下所示,其中“#”后面为注释:
# 忽略一个文件夹
.idea/
# 忽略一个某种类型的文件
*.pyc
撤销更改与版本回退
http://git.mydoc.io/?t=83149
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。 git checkout其实是用版本库或者暂存区中的版本替换工作区的版本,无论工作区是修改还是删除(删除也算一种修改),都可以“一键还原”。另,就是让这个文件回到最近一次git commit或git add时的状态
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file(将该文件的更改拉回到工作区,即原本在暂存区的更改变成在工作区的更改),就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
git reset --hard 版本号 # 回退到固定版本
git reset --hard HEAD^ # 回退到上一个版本
git reset --hard HEAD^^ #回退到上上个版本,以此类推
git reset 另外的用法:
git reset 版本号 # 回退到某一版本但工作区保存自该版本起的修改
git reset HEAD^ # 回退到某一版本但工作区保存自该版本起的修改
git reset HEAD^^ file # 仅仅回退某个文件
–hard应该为放弃所有修改,包括工作区和暂存区的。
git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
如何处理代码冲突
git diff : 查看工作区 与 最近一次git commit或git add时的区别
其他
本地库结构
需要理解工作区、版本本库中的暂存区(stage),修改的文件需要首先加入暂存区,才能够commit到分支。
- 工作区: 就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。
- 版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
2. 例子
如何初始化项目
假设你在本地已经写好了项目的一部分,然后想利用git来进行版本管理。那么首先登陆进码云,创建一个库,名为“deep_face_reco”,然后在自己的本地使用如下命令,将项目提交给远程库,完成初始提交:
#git 全局配置
git config --global user.name "xxx"
git config --global user.email "xxx@foxmail.com"
#项目初始提交
cd xxx
git init
touch README.md
touch .gitignore
git add .
git commit -m "first commit"
git remote add origin https://git.oschina.net/xxx/xxx.git
git push -u origin master