git学习总结
Git 有三种状态:
- 已提交(committed):表示数据已经安全的保存在本地数据库中
- 已修改(modified):表示修改了文件,但还没保存到数据库中
- 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
git 的三种区域:
- Git 仓库:是 Git 用来保存项目的元数据和对象数据库的地方
- 工作目录:是对项目的某个版本独立提取出来的内容
- 暂存区域:是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中
Git工作流程(具体的Git命令,可以man git 查看):
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。 (git add . 这个操作?)
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。 (git commit这个操作?)
git的配置文件(主要存储在3个地方):
/etc/gitconfig
文件:包含系统上每一个用户及他们仓库的通用配置。~/.gitconfig
:只针对当前用户.git/config
:当前使用仓库的 Git 目录中的 config 文件,针对当前git仓库。
查看git配置信息命令:git config --list
git help config
= man git
获取git项目仓库有2种方法:
- 从现有项目导入所有文件到git中
大概意思是当前项目/目录中有文件/代码,但是没有git仓库,然后自己可以通过命令git init
创建一个git仓库(.git)。在git仓库里面包含有初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。在执行git init
后只是做了一个初始化操作,后续还要将文件进行跟踪操作。 - 克隆现有的仓库
使用命令git clone
可以得到已存在的git仓库的一份拷贝和该目录下的所有文件(即不只是git仓库,还有可以使用的其他文件),克隆仓库的命令格式是git clone [url]
。
在git仓库同目录下的所有文件分为2种状态:
- 已跟踪文件,已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区(此处又有三个状态,需要和已跟踪和未跟踪进行区分)。
- 未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。
git 的具体操作:
- 通过命令
git status
查看当前git同目录文件状态
administrator@administrator:~/projects/cd$ git status
位于分支 master
初始提交
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
repo
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
- 通过命令
git add
开始跟踪一个文件(添加内容到下一次提交中,执行它后,会将对应文件放入暂存区域)
administrator@administrator:~/projects/cd$ git add repo
administrator@administrator:~/projects/cd$ git status
位于分支 master
初始提交
要提交的变更:
(使用 "git rm --cached <文件>..." 以取消暂存)
新文件: repo
如果此时在对文件repo进行修改,使用
git status
查看:
administrator@administrator:~/projects/cd$ git status
位于分支 master
初始提交
要提交的变更:
(使用 "git rm --cached <文件>..." 以取消暂存)
新文件: repo
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: repo
即暂存区域存放的还是上一次的修改记录,如果现在提交,则是将上次的文件给提交了,当前这次的修改还在本地,未放入 git仓库。查看修改
a. 查看未暂存文件修改,使用命令git diff
(或者说该命令是查看暂存前和暂存后之间的差异)
b. 查看已暂存文件修改,使用命令git diff --cached
(或者说该命令是查看上次提交和这次准备提交之间的差异)将暂存区域的修改提交到 git 库中,使用命令
git commit -m "引号里面的为提交 comment"
administrator@administrator:~/projects/cd$ git commit -m 'first commit'
[master (根提交) 4e0da03] first commit
1 file changed, 835 insertions(+)
create mode 100755 repo
撤销部分文件的暂存
如对2个文件repo和文件README都进行了修改,然后其中一个文件是临时文件,并不需要上传。
a. 为了方便可以先将所有的文件都存入暂存区administrator@administrator:~/projects/cd$ vim README administrator@administrator:~/projects/cd$ administrator@administrator:~/projects/cd$ administrator@administrator:~/projects/cd$ administrator@administrator:~/projects/cd$ vim repo administrator@administrator:~/projects/cd$ git add . administrator@administrator:~/projects/cd$ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存) 修改: README 修改: repo
b. 将README从暂存区中取消
administrator@administrator:~/projects/cd$ git reset HEAD README 重置后取消暂存的变更: M README administrator@administrator:~/projects/cd$ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存) 修改: repo 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: README
c. 最后执行
git commit -m
命令将暂存区文件提交到本地git仓库administrator@administrator:~/projects/cd$ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存) 修改: repo 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: README administrator@administrator:~/projects/cd$ git commit -m 'commit file repo noly' [master 165d9c4] commit file repo noly 1 file changed, 1 insertion(+), 1 deletion(-) administrator@administrator:~/projects/cd$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: README 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
撤销对文件的修改
其实从前面的提示就可以看到,使用命令git checkout
使用 "git checkout -- <文件>..." 丢弃工作区的改动
administrator@administrator:~/projects/cd$ git checkout README administrator@administrator:~/projects/cd$ git status 位于分支 master 无文件要提交,干净的工作区
- 远程git仓库
可以通过命令git remote -v
查看远程git仓库。
administrator@administrator:~/projects/morpho_iris/development$ git remote -v
tbm git@tbm.gitweb.com:/tabet_quicl/platform/development.git (fetch) (同时可以通过命令 git clone git@tbm.gitweb.com:/tabet_quicl/platform/development.git将远程git仓库和文件copy下来)
tbm git@tbm.gitweb.com:/tabet_quicl/platform/development.git (push)
区分
git clone
,git fetch
,git pull
和git rebase
本地仓库推送到远程仓库
将本地仓库推送到其上游,命令git push [remote-name] [branch-name]
持续更新中……