Git 成长贴[一]


    由于工作的需要,自己常常需要对同样的代码拉不同的分支,做不同的测试,最后要合并其中一个分支。刚看时使用SVN,发现自己必须在本地或者服务器上建立不同的分支,而且拉很多分支的时候这个就很痛苦。
    后来发现Git--分布式的版本控制工具,自己便在本地使用它做为版本管理。发现它不论在拉分支(Git可以随意拉很多分支),合并,提交都很是方便。
现在总结下Git的使用。


基本使用

git config --global user.name "your name"
git config --global user.email "your email"

git init
git add <filename>

#当前目录下的所有文件
git add . 
git add <path>

git checkout
git checkout -b <new branch name>
git branch
git branch <new branch name>
git log
git log -p
git diff

git commit -m "your comment" /* 针对用git-add添加过新文件的情况使用 */
git commit -a -m "your comment" /* 针对无新文件添加的情况使用 */

git pull
git push

git reset --hard 等同于 git reset --hard HEAD(见后面描述)
7) 软恢复(只恢复git索引,不改变其它任何文件修改内容和git status信息)
git reset --soft 等同于 git reset --soft HEAD(见后面描述)
8) 默认恢复 (恢复git索引和git status状态,不改变任何修改文件的内容)
git reset --mixed等同于git reset等同于git reset HEAD 等同于git reset --mixed HEAD
9) HEAD, HEAD^, HEAD^^, HEAD^<n>分别表示当前提交,倒数第二次提交,倒数第三次提交,以及倒数第n次提交
git reset --hard HEAD^
git reset --soft HEAD
10) 查看某次修改
git show HEAD等同于git show
git show HEAD^
git show HEAD^^
git show HEAD^<n>
10) 查看所有修改记录
git log
11) 克隆git
git clone src_git target_git

15) 删除分支
git branch -d delete_branch
16) 合并分支
git merge src_branch
17) 同步clone的git仓库
git fetch origin
git merge origin/master
18) 远程git访问
git pull remote_git [local_git]
19) 更新远程git
git push remote_git current_branch

例如:git remote add origin git://github.com/someone/another_project.git
上面的命令就会增加URL地址为'git: //github.com/someone/another_project.git',名称为origin的远程服务器,以后提交代码的时候只需要使用 origin别名即可


掌握提高

git rebase:用下面两幅图解释会比较清楚一些,rebase命令执行后,实际上是将分支点从C移到了G,这样分支也就具有了从C到G的功能

 


git reset:将当前的工作目录完全回滚到指定的版本号,假设如下图,我们有A-G五次提交的版本,其中C的版本号是 bbaf6fb5060b4875b18ff9ff637ce118256d6f20,我们执行了'git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20'那么结果就只剩下了A-C三个提交的版本

 


git stash:将当前未提交的工作存入Git工作栈中,时机成熟的时候再应用回来。

基础命令:
$git stash
#do your work
$git stash pop

进阶:
当你多次使用’git stash’命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑,’git stash list’命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用’git stash apply stash@{1}’就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用’git stash clear’来将栈清空

git tag:可以将某个具体的版本打上一个标签,这样你就不需要记忆复杂的版本号哈希值了,例如你可以使用'git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20'来标记这个被你还原的版本,那么以后你想查看该版本时,就可以使用 revert_version标签名,而不是哈希值了

SVN(Subversion)是当前使用最多的版本控制工具。与它相比较,Git 最大的优势在于两点:易于本地增加分支和分布式的特性

下面两幅图可以形象的展示Git与SVN的不同之处

 

------------


 

    对于易于本地增加分支,图中Git本地和服务器端结构都很灵活,所有版本都存储在一个目录中,你只需要进行分支的切换即可达到在某个分支工作的效果。而 SVN则完全不同,如果你需要在本地试验一些自己的代码,只能本地维护多个不同的拷贝,每个拷贝对应一个SVN服务器地址。举一个实际的例子,以前我所在 的小组使用SVN作为版本控制工具,当我正在试图增强一个模块,工作做到一半,由于会改变原模块的行为导致代码服务器上许多测试的失败,所以并没有提交代 码。这时候上级对我说,现在有一个很紧急的Bug需要处理, 必须在两个小时内完成。我只好将本地的所有修改diff,并输出成为一个patch文 件,然后回滚有关当前任务的所有代码,再开始修改Bug的任务,等到修改好后,在将patch应用回来。前前后后要完成多个繁琐的步骤,这还不计中间代码 发生冲突所要进行的工作量。可是如果使用Git, 我们只需要开一个分支或者转回到主分支上,就可以随时开始Bug修改的任务,完成之后,只要切换到原来的分支就可以优雅的继续以前的任务。只要你愿意,每 一个新的任务都可以开一个分支,完成后,再将它合并到主分支上,轻松而优雅。

    分布式对于Git而言,你可以本地提交代码,所以在上面的图 中,Git有利于将一个大任务分解,进行本地的多次提交,而SVN只能在本地进行大量的一次性更改,导致将来合并到主干上造成巨大的风险。Git的代码日 志是在本地的,可以随时查看。SVN的日志在服务器上的,每次查看日志需要先从服务器上下载下来。我工作的小组,代码服务器在美国,每次查看小组几年前所 做的工作时,日志下载就需要十分钟,这不能不说是一个痛苦。后来我们迁移到Git上,利用Git日志在本地的特性,我用Ruby编写了一个Rake脚本, 可以查看某个具体任务的所有代码历史,每次只需要几秒钟,大大方便我的工作。当然分布式并不是说用了Git就不需要一个代码中心服务器,如果你工作在一个 团队里,还是需要一个服务器来保存所有的代码的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值