电子说
将版本库还原到历史的某个时刻的状态
git reset --hard logid(logid的前几位即可)
将版本库还原到上一次commit之前的状态
git reset --hard HEAD^
有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令。
回退到某个版本,只回退了commit的信息,代码修改过的没变。如果还要提交,直接commit即可;
git reset –-soft
彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉,即commit与修改过代码都撤销,变为原来的某个版本;
git reset -–hard
添加版本库的用户名到本地配置文件
git config --global user.name 'username'
添加版本库的用户邮箱到本地配置文件
git config --global user.emal 'emal'
执行git diff来查看执行git status的结果的详细信息。
git diff命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。
尚未缓存的改动:
git diff
查看已缓存的改动
git diff --cached
查看已缓存的与未缓存的所有改动
git diff HEAD
显示摘要而非整个diff
git diff --stat
举个栗子:
git status -s
git diff
git add hello.php
git status -s
git diff --cached
git commit -m 'test comment from w3cschool.cn'
提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步
git add
git commit -am 'changes to hello file'
表示提交的信息中带有署名信息
git commit --signoff -m 'xxx'
表示对上一次提交的信息,进行修改提交
git commit --amend 'xxx'
将文件从缓存区中移除
git rm
git rm hello.php
将文件从缓存区和你的硬盘中(工作目录)删除。如果要在工作目录中留着该文件
git rm file
git rm --cached
git log 查看提交历史
git log --oneline --oneline 选项来查看历史记录的简洁的版本
git log --oneline --graph -graph 选项,查看历史中什么时候出现了分支、合并。
git log --reverse --oneline '--reverse'参数来逆向显示所有日志
git log --author=Linus --oneline -5 --author , 例如,比方说我们要找 Git 源码中 Linus 提交的部分
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
查看所有标签
git tag
-a选项意为“创建一个带注解的标签”。不用-a选项也可以执行,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加标签的注解
git tag -a v1.0
git log --online --decorate --graph --decorate 时,我们可以看到我们的标签
追加标签
git tag -a v0.9 85fc7e7
git log --oneline --decorate --graph
指定标签信息命令
git tag -a -m "w3cschool.cn标签"
PGP标签命令
git tag -s -m "w3cschool.cn标签"
查看版本:
git tag
创建版本:
git tag [name]
删除版本:
git tag -d [name]
查看远程版本:
git tag -r
创建远程版本(本地版本push到远程):
git push origin [name]
删除远程版本:
git push origin :refs/tags/[name]
合并远程仓库的tag到本地:
git pull origin --tags
上传本地tag到远程仓库:
git push origin --tags
创建带注释的tag:
git tag -a [name] -m 'yourMessage'
SVN是当前使用最多的版本控制工具。与它相比,Git最大的优势在于两点:易于本地增加分支和分布式的特性。
图中Git本地和服务器端结构都很灵活,所有版本都存储在一个目录中,你只需要进行分支的切换即可达到在某个分支工作的效果。
而SVN则完全不同,如果你需要在本地试验一些自己的代码,只能本地维护多个不同的拷贝,每个拷贝对应一个SVN服务器地址。
举个例子:
使用SVN作为版本控制工具,当正在试图增强一个模块,工作做到一半,由于会改变原模块的行为导致代码服务器上许多测试的失败,所以并没有提交代码。
这时候假如现在有一个很紧急的Bug需要处理, 必须在两个小时内完成。我只好将本地的所有修改diff,并输出成为一个patch文件,然后回滚有关当前任务的所有代码,再开始修改Bug的任务,等到修改好后,在将patch应用回来。前前后后要完成多个繁琐的步骤,这还不计中间代码发生冲突所要进行的工作量。
可是如果使用Git, 我们只需要开一个分支或者转回到主分支上,就可以随时开始Bug修改的任务,完成之后,只要切换到原来的分支就可以优雅的继续以前的任务。只要你愿意,每一个新的任务都可以开一个分支,完成后,再将它合并到主分支上,轻松而优雅。
Git 可以本地提交代码,所以在上面的图中,Git有利于将一个大任务分解,进行本地的多次提交;
而SVN只能在本地进行大量的一次性更改,导致将来合并到主干上造成巨大的风险。
Git 的代码日志是在本地的,可以随时查看;
SVN的日志在服务器上的,每次查看日志需要先从服务器上下载下来。
例如:代码服务器在美国,当每次查看几年前所做的工作时,日志下载可能需要十分钟,这不能不说是一个痛苦。但是如果迁移到Git上,利用Git日志在本地的特性,查看某个具体任务的所有代码历史,每次只需要几秒钟,大大方便了工作,提高了效率。
当然分布式并不是说用了Git就不需要一个代码中心服务器,如果你工作在一个团队里,还是需要一个服务器来保存所有的代码的。
全部0条评论
快来发表一下你的评论吧 !