(svn、git)CVS版本控制系统
git remote add [shortname] [url]
git push [remote-name] [branch-name]
git remote rename file_old file_new
git和svn区别
git |
svn |
|
分布式 |
是分布式的,没有网络时依然可 以提交文件,查看历史记录 |
不是分布式的 |
svn
对于已提交的代码撤销操作:
这种情况下,有多种办法可以进行撤销修改。一般我们推荐用svn merge来达成目的。
典型的操作过程如下:
1、保证我们拿到的是最新代码:
svn update
假设是28版本。
2、然后找出要移除的确切版本:
svn log contacts.Java
根据log怀疑是27版本改坏的,比较一下:
svn diff -r 26:27 contacts.java
发现果真是27版本坏事。
3、撤销27版本的改动:
svn merge -r 27:26 contacts.java
为了保险起见,再次确认合并的结果:
svn diff contacts.java
发现已正确撤销了改动,提交。
4、提交改动
svn commit -m "Revert wrong change from r27"
提交后版本变成了29。
git
000.流程图
git图解
(1)
绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。 这张图片里显示最后5次提交,ed489是最新提交。 master分支指向此次提交,另一个maint分支指向祖父提交节点。
(2)diff
(3)commit
提交时,git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。然后把当前分支指向新的提交节点。下图中,当前分支是master。 在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。
git的配置
git config --global user.name "robbin"
git config --global user.email "fankai#gmail.com"
git config --global color.ui true
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global core.editor "mate -w" # 设置Editor使用textmate
git config -1 #列举所有配置
001.开始git管理,会生成.git文件夹
git init
002.将某些文件纳入git管理
git add *.java
git commit -m "纳入版本控制"
003.克隆仓库,git使用clone,svn使用checkout
git clone url
克隆的时候自己新建项目的名称,末尾加上名称即可
git clone url 新建项目的名称
004.至此我们手上已经有了一个真实项目的git仓库,工作目录下的所有文件只有两种状态:已跟踪、未跟踪;在上次快照中有记录的为已跟踪,可以是已修改或未修改,clone下的所有文件都是已跟踪状态;
005.检查当前文件的状态
git status
006.跟踪文件,即将文件纳入版本管理,把目标文件快照放入暂存区域
git add XXX.java
007.此时已处于暂存状态,此时commit,该文件的版本将被留在历史记录中
008.忽略某些文件,有些文件无需纳入git管理,也不需要出现在未跟踪文件中,可以创建.gitignore文件,一开始就养成设置.gitignore的文件习惯,避免提交无用的文件
.gitignore文件的规范格式如下:
- 所有空行或者以注释符号#开头的都会被git忽略
- 可以使用标准的 glob 模式匹配。 * 匹配模式最后跟反斜杠(/)说明要忽略的是目录。 * 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反
- 所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9] 表示匹配所有 0 到 9 的数字)
009.查看修改了文件的哪些内容,比较的是当前文件和暂存区域快照之间的区别,即没有暂存起来的改动,add表示暂存了
git diff
如果需要查看已暂存区域的文件和上次提交的快照之间的差异
git diff --cached
010.提交更新,暂存区域可以提交了,之前先git status看是否都暂存起来了,是否有遗漏
git commit
这种方式会启动文本编辑器来输入本次提交的说明,使用git config --global core.editor 命令设定你喜欢的编辑软件
git commit -m "说明文字"
会显示在哪个分支提交的(master)
注意:提交的是放在暂存区域的快照,即add之后的,每次提交,都是对项目做一次快照,以后可以回到这个状态或者进行比较
011.跳过add直接提交,commit后加-a,即跳过暂存区域,直接commit快照
git commit -a -m "跳过使用暂存区域"
012.移除文件,即从暂存区域移除文件,然后提交
git rm XXX
git commit
如果删除之前修改过并且已放到暂存区(add),则需要强制删除,加-f,force的首字母
git rm -f XXX
git commit
删除暂存区域的文件,但本地文件不删除,后续加入.gitignore文件,如误提交了日志文件
git rm --cached XX
git commit
013.移动文件,或者给文件改名
git mv file_from file_to
mv相当于执行了下边三条语句
mv file_from file_to
git rm file_from
git add file_to
014.查看提交历史
git log
默认不加参数,按时间排序,最新的排在最上边
git log -p -2
p列出每次提交的差异,-2仅显示最近两次的更新
git log --pretty=oneline
--pretty显示格式,oneline表示将每次提交放在一行显示,还有short、full、fuller
git log --pretty=format:"%h - %an, %ar : %s"
定制要显示的输出格式
表 2-1 列出了常用的格式占位符写法及其代表的意义。
Shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
选项 说明 %H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明 |
015.撤销操作
修改最后一次提交
git commit --amend
如果刚才提交后没有任何改动执行此命令,可以修改提交说明,会覆盖上次提交,仅显示一次
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
上面3条漏了文件,只显示一次提交
016.取消已经暂存的文件,git add之后取消操作,git status后有显示命令
git revert HEAD XX
取消对文件的修改,刚才的修改没有必要,git status有提示
git checkout -- XX
017.查看当前的远程库
git remote
可以查看当前配置有哪些远程库,会列出每个远程库的简短名字
git remote -v
可以显示对应的克隆地址
018.添加远程仓库,可以指定一个简单的名字,以便使用
git remote add [shortname] [url]
019.从远程仓库抓取数据(常使用git pull)
git fetch [remote-name]
会从远程仓库中拉取所有你本地仓库中还没有的数据,运行完成后,你就可以在本地访问该远程仓库中的所有分支;
如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。
git fetch只是将远程数据拉到本地仓库,并不会自动合并到当前工作分支,只能手工合并
git pull会自动抓取数据下来,并自动合并到当前分支
020.推送数据到远程仓库
git push [remote-name] [branch-name]
将本地的master分支推送到origin服务器上(克隆操作会自动使用默认的origin和master)
021.查看远程仓库信息
git remote show [remote-name]
022.远程仓库的删除和重命名
git remote rename file_old file_new
git remote
移除和删除
git remote rm [remote-name]
git remote
023.创建分支,如新建testing分支
git branch testing
024.切换分支
git checkout testing
025.分支的新建和切换
git checkout -b [new-branch]
相当于
git branch [new-branch]
git checkout [new-branch]