好文推荐:
http://www.vogella.com/tutorials/EclipseGit/article.html
http://marklodato.github.io/visual-git-guide/index-zh-cn.html
git相关概念
快照:确认要提交的代码,给这些代码用SHA-1做个标记,然后提交到repository中(仓库)
分支(branch):就是一个命名的快照(snapshot).
Staged (index): 维护一个需要提交的文件列表,提交的时候只提交这个列表中的内容。
revision:把特定版本的内容覆盖当前工作目录的内容(只是受版本控制的文件和文件夹被替换掉)
branch和tag的区别:都是命名的snapshot,但tag固定到特定版本,分支是不固定的,当提交后,内容会随时变。
git文件的种状态
untracked:没有放到版本控制进行管理的文件,eclipse中显示为?号,add index变为staged状态。然后进行commit,变为tracked。
tracked:已经放到版本库中管理,且工作目录中的版本和版本库中保持一致,无需任何处理。
staged: 维持需要提交的文件列表。是变更的内容(可能有新文件的加入)
dirty: 工作目录中的文件内容发生了变化,比版本库中的内容新。add index变为staged状态,然后进行commit。变为tracked。
conflic: 工作目录中的内容有变化,但是版本库中文件版本比工作目录中的文件版本要新(不一致?),需要合并(merge)
针对system进行设定
执行下面的命令,会建立/etc/gitconfig文件,文件内容如下。
git config --system user.name 'zhouyc'
git的全局设定
执行下面的命令,会建立~/.gitconfig文件,文件内容如下。
git config --global user.name 'zhouyc'
git config --global user.email '[email protected]'
git config --global push.default simple (只push当前活动的分支内容)
# set default so that you avoid unnecessary commits
git config --global branch.autosetuprebase always
git config --global core.editor vim
git config --global merge.tool kdiff3
git config --global core.excludesfile ~/.gitignore
配置ignore文件和文件夹规则
在repository的根目录下配置.gitignore文件
bin/
target/
注意:因为ignore的配置,目的是不用版本控制这些文件,但是已经放到版本控制中的文件
是不会移除的,如果确认的确不想放到版本库中进行管理,通过下面命令进行移除。
git rm -r --cached [filename]
git常用命令
注意:
如果使用git add把文件放到stage中后或者提交了,然后把工作目录中的文件删除,git是不知道的,
需要执行下面的命令:git rm nonsense2.txt
查看状态
git status
每次要提交时,都需要把变化的内容先放到stage中,然后在提交
git add . 把当前目录下的所有内容放到stage中
git add file
git commit -m 'init commit'
#查看提交历史记录
git log
删除文件的操作:
0)没有被跟踪的文件(就是没有使用add添加过的文件),直接删除就可以了。
1)同时删除工作区和repository中的文件
git rm fname
git commit -m ‘delete fname from working and repository'
2)删除repository中的文件,保留工作区的文件。
git remove --cache fname
git commit -m ‘delete fname only from repository’
3)删除stage中已经有更新,但未commit的文件
先执行git reset file,(用repository中的文件覆盖staged中的文件)然后在删除。
4)只删除工作区的文件(无理由,从repository中恢复就好了,为啥只删除工作区的文件?)