coding……
但行好事 莫问前程

Git使用教程

之前从未用过git之类的版本控制工具,入职之后,公司使用git做版本控制,到现在也算是了解了git的基本操作。今天总结一下,希望可以给未使用过git的同学一些帮助。首先树立一个观点,git这玩意放心大胆的玩,玩不坏。

Git是一种分布式版本控制工具,而SVN这种属于集中式版本控制工具。关于分布式与集中式管理的区别,我感觉就是集中式存在一个中央服务器的概念,并且只有在网络通畅可以与中央服务器交互的前提下才能工作。而分布式版本控制系统根本没有“中央服务器“,每个人的电脑上都是一个完整的版本库,这样,工作的时候,就不需要联网了,因为版本库就在你自己的电脑上,且更加安全,因为每个人本地都有一个版本库,不会因为某一台机器崩溃而导致代码不可用。Git的使用也可以分为图形Git和命令Git,图形Git就是依托一些图形化工具与版本库进行交互,命令Git就是直接通过命令行的方式操作。这里我只介绍命令行Git的使用。

先普及几个概念(便于理解的解释,并不完全准确):

工作区:本地正在修改的文件集

缓存区:add操作的对象

版本库:commit操作的对象

本地分支操作

  • init一个本地git仓库
git init
  • 克隆远程仓库,不指明分支的时候,默认克隆远程master分支,*.git为远程仓库git地址(支持SSH和Http形势)
git clone *.git
git clone -b 分支名 *.git
  • 添加文件到版本库缓存区
git add filename
  • 将提交到版本库缓存区的内容提交到当前分支
git commit -m 备注信息
  • git操作历史
git log --pretty=oneline (行形式显示git操作历史)
git reflog (显示所有历史,包括未来)
git log --graph (图像化显示历史)
git reset --hard commit_id (版本回退)
git reset --hard HEAD^ (回退到上一个git版本)
git reset --hard HEAD~n (回退到之前n个版本)
  • 放弃本地对文件的修改(原理就是用版本库当前分支的文件覆盖工作区的文件)
git checkout -- filename
  • 放弃已add到缓存区的文件修改
步骤1:git reset HEAD filename
步骤2:git checkout -- filename
  • 删除文件,删除版本库及工作区文件
git rm filename
  • 删除远程仓库文件,保留本地文件
步骤1: git rm --cached useless.log
步骤2: git commit -m "remove file from remote repository"
步骤3: git push
  • 删除远程仓库useless文件夹,保留本地文件夹(使用-r参数)
步骤1: git rm --cached -r useless
步骤2: git commit -m "remove directory from remote repository"
步骤3: git push
  • 恢复误删的本地文件(原理是用版本库当前分支的文件覆盖工作区的文件,所以会带来一个问题,上次commit后修改的东西,因为版本库是没有的,这部分修改回丢失)
git checkout -- filename
  • 分支操作
git branch (查看本地分支)
git branch -a (查看分支,包括本地分支和远程分支)
git branch name (创建分支)
git checkout name (切换分支)
git checkout -b name (创建+切换分支)
git merge name (合并某分支到当前分支)
git branch -d name (删除分支)
git branch -D name (强行删除分支,如果分支未commit, 使用-d是无法删除的,只能强制删除)

远程操作

  • 把一个已有的本地仓库与远程仓库关联(ps:直接使用git clone命令会直接在本地建一个与远程关联的仓库)
git remote add origin *.git
  • 本地分支与远程分支关联
git branch --set-upstream-to origin/远程分支 本地分支
  • 将本地分支提交到远程仓库
git push <远程主机名> <本地分支名>:<远程分支名>
ps:若本地远程有关联关系,远程主机名用origin代替
ps:若省略远程分支名,则表示将本地分支提交到远程相同的分支上,如果远程不存在该分支,则新建该分支
ps:若省略本地分支,则表示将本地一个空的分支提交到远程,即删除远程分支
git push origin :dev等价于git push origin --delete dev
ps:若本地分支和远程分支同时省略,表示讲本地当前分支提交到远程相同的分支

git push --all origin (将本地所有分支都提交到远程)
  • 将远程分支合并到本地
git pull <远程主机> <远程分支>:<本地分支>
ps:如果省略本地分支,则表示讲远程分支合并到本地当前分支
  • bug修改流程
步骤1: git stash 暂存本地工作区修改内容
步骤2: git checkout master 切换到master分支,用于在master分支上新建bug分支
步骤3: git checkout -b bug01 新建bug分支用于休bug
步骤4: 修复bug
步骤5: git add + git commit 
步骤6: git checkout master 切回master分支,
步骤7: git merge --no-ff -m "" bug01 合并bug01到master分支
步骤8: bug修复完成,切回原工作分支,git stash pop 弹出stash内容

上面讲的其实还是有点复杂,其实工作之中最常用的还是,建分支,在分支上修改,add到本地缓存区,commit到本地版本库,push到远程仓库。现在的ide比如Intellij Idea都可以很好的支持git操作,使用起来相当简单。出现问题时,根据ide提示基本都能解决。

参考:

  1. 廖雪峰Git教程
  2. litianze99的专栏-git push & git pull 推送/拉取分支
  3. segmentfault-Git删除操作

赞(0) 打赏
Zhuoli's Blog » Git使用教程
分享到: 更多 (0)

相关推荐

  • 暂无文章

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址