git的基本用法

来源:互联网 发布:滨海网络电视台 编辑:程序博客网 时间:2024/05/21 06:21

git功能强大,要熟练掌握不是那么容易的,以下是个人学习的简单总结。

git对版本的分布式控制主要体现在其repository在本地,大部分的操作都直接在本地完成。把repository放在本地也是一种备份。(本地备份git clone <repos> <repos_backup>)

在git之前linux下就有diff/patch这样的tool,有兴趣可以细究,git 里有相似的用法。

git init / git add / git commit 创建版本库

最好是每完成一个功能就提交一次,版本控制不是文件备份。

git add命令将修改内容加入提交暂存区,执行git add -u可以将所有修改加入暂存区,执行git add -A可以将本地删除文件和新增文件都提交到暂存区,执行git add -p可以对一个文件内的修改进行有选择性的添加。

只要使用git,就会时刻与隐形的提交列表打交道。

 

从图5-1中可以看到部分git命令是如何影响工作区和暂存区的。

图左侧为工作区,右侧为版本库。标记为index的区域是暂存区,标记为master的是master分支所代表的目录树。

当对工作区修改的文件执行git add命令时,暂存区的目录树将被更新,同时工作区修改的文件内容会被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

当执行提交操作(git commit)时,暂存区的目录树会写到版本库(对象库)中,master分支会做相应的更新,即master最新指向的目录树就是提交后原暂存区的目录树。

当执行git reset HEAD命令时,暂存区的目录树会被重写,会被master分支指向的目录树所替换,但是工作区不受影响。

当执行git rm --cached <file> 命令时,会直接从暂存区删除文件,工作区则不做出改变。

master代表分支master中最新的提交,HEAD代表版本库中最近的一次提交。符号^可以用于指代父提交。

重置命令git reset --hard <commit_id>可以将master指向任意的commit id.

如果没有记下重置前master分支指向的提交ID,想要重置回原来的提交可以使用git reflog show master | head, 找出ID再进行reset。

使用git checkout <commit_id>可以改写HEAD指向特定的commit id, 在commit id下修改提交不会被任何分支追踪,会过期遗失,可以使用git merge合并解决。

git log --oneline --graph --decorate, 按需加参数。

cherry-pick按需合并分支。

git rebase --onto <newbase> <since> <till>将since之后的till及其之前的提交全部迁移到newbase上。

保存和恢复工作进度使用git stash/git stash pop

git修改最新的提交说明可以这样:git commit --amend, 如果不带-m参数则会进入提交说明界面

如果要修改某个历史提交说明,则需使用变基指令:git rebase

使用git来操作SVN版本控制服务器的一般工作流程为:

(1) 访问SVN服务器,将SVN版本库克隆为一个本地的git库: git svn clone <svn_repos_url>

(2) 使用git命令操作本地克隆的版本库。

(3) 将本地提交同步到SVN服务器:git svn fetch / git svn rebase / git svn dcommit

 

参考:《Git权威指南》

 

 

 

0 0