Git教程(3)git工作区与文件状态及简单示例
基础
目录:
- working driectory 工作目录,就是我们的工作目录,其中包括未跟踪文件及暂存区和仓库目录。
- staging area 暂存区,不对应一个具体目录,其实只是git directory中的一个特殊文件。
- git directory 仓库目录,就是.git目录,里面保存了所有的版本信息等内容。
文件状态:
- untracked 未跟踪 : 只有处于已跟踪状态的文件才被纳入GIT的版本控制.
- modified 已修改:已修改表示修改了文件,但还没保存到暂存区中。
- staged 已暂存 : 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- committed 已提交:表示数据已保存在仓库目录中。
基本的 Git 工作流程如下:
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
-
提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
示例
1,配置git
- 配置提交的用户名,提交时注释的文本工具等,下面是对当前用户配置的命令
$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com
$ git config --global core.editor emacs $ git config --global core.editor "'C:/Program Files/Sublime Text/sublime_text.exe' -w" ## windows下配置编辑器sublime() $ git config --list ## 检查配置信息 $ git config username ## 检查git某一项配置/etc/gitconfig 对本机所有用户,~/.gitconfig 对当前用户 ,<project>/.git/config 对当前工程。
- 配置 .gitignore 文件
在项目的根目录下,与.git目录同级。
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore
文件列表,你可以在 https://github.com/github/gitignore 找到它.
2,生成git仓库,有两个方式
在源码根目录
$ git init
克隆已有的仓库
$ git clone https://github.com/libgit2/libgit2 mylibgit
本例子克隆远程把仓库同时把仓库根目录命名为 mylibgit,命名这步是可选的。
3,在本地操作文件
将文件添加到暂存区,准备提交
$ git add README
将一个文件从git跟踪列表移除,如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
$ git rm PROJECTS.md
相关的还有:
$
git rm --cached README $
git rm log/\*
.log $
git rm \*
~
重命名或移动文件
$ git mv README.md README
4,在本地提交
-a 表示把所有修改过添加到已暂存中,-m 是提交的注释信息
$ git commit -a -m "Story 182: Fix benchmarks for speed"
5,查看历史记录
以一行的形式显示
$ git log --pretty=oneline
6,撤消某些操作(amend,reset,checkout)
修改最近一个提交,包括提交的注释,提交的文件等一系列操作。注意此命令前的若干条命令都被视作对上一次commit的修改。
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
把一个文件重置,取消暂存态
$ git reset HEAD CONTRIBUTING.md
把一个文件恢复到上一次提交时的样子
$ git checkout -- CONTRIBUTING.md
7,提交到远程服务器(remote,pull,push)
查看远程仓库
$ git remote -v
查看详细信息(origin)是仓库名,通常提交前应先看下。
$ git remote show origin
添加一个新的远程 Git 仓库,同时指定一个你可以轻松引用的别名 以后就可以把pb 当 https://github.com/paulboone/ticgit
$ git remote add pb https://github.com/paulboone/ticgit
从远程仓库中抓取你还没有的数据,它并不会自动合并或修改你当前的工作。
$ git fetch pb
运行 git pull
通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
$ git pull pb
把文件推到远程服务器, 只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效,当你和其他人在同一时间克隆,
他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。
注意,push前一定要先pull
$ git push origin master
远程仓库的重命名,把pb改为paul
$ git remote rename pb paul
远程仓库的删除
$ git remote rm paul
删除远程的文件,有时误把项目编译的临时文件上传到远程,这时可以删除它们
git rm -rf bin/ gen/
之后执行git commit, git push 就可。