为什么要用Git?
你是否有这样的精力,写毕业论文时,总要复制之前的版本,然后继续编辑,一个毕业论文的文件夹充满了毕业论文1、毕业论文2···毕业论文5,毕业论文最后版,毕业论文究极版,毕业论文不改版····Git可以很好地帮你管理这方面的版本,它会记录每个版本修改的东西,但不需要每次都复制,非常方便管理。
另一方面,如果多个人一起完成一个项目,那么更加需要版本管理,特别是在大型软件编写的过程中,Git的优势更加明显。最爽的是,Github是丰富的资源库,你可以从别人的Git库中“克隆”学习代码,还可以很容易分享自己的代码。
不过Git的更适合管理纯文本文件,比如.txt、.c、.py等代码,Office文档如word、excel、ppt等适合用svn。
一下代码均上来自廖雪峰Git教程
基本操作
window的Git软件,开始菜单找到“Git”->“Git Bash”,每个机器需要自报家门:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
在Git Bash里面可以用linux的基本操作命令。建立新仓库:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
$ git --help #非常有用的帮助文档
添加文件到仓库,并提交文件到仓库:
#工作区>>>>暂存区>>>>版本库
$ git add readme.txt # 加入“暂存区”
$ git commit -m "wrote a readme file"#”加入版本库“
查看当前仓库状态:
$ git status #会显示下一步操作参考指令,很有用
$ git diff # 比较“工作区”与“暂存区”的区别
$ git diff --cached # 比较“暂存区”与“版本库”的区别
$ git diff HEAD --readme.txt #比较“工作区”与“版本库”的区别
$ git log #查看提交历史日志,以便退回
$ git reflog #查看命令历史,以便回到未来版本
$ git log --pretty=oneline #单行显示日志
$ git reset --hard HEAD^ #退回上一版本
$ git reset --hard 1094a #回到某一版本
撤销和退回
$ git restore readme.txt #撤销工作区的修改
$ git restore --staged readme.txt #撤销添加暂存区
$ git reset HEAD~1 readme.txt #退回上一版本
$ rm test.txt # 工作区中删除文件
$ git rm test.txt # 从版本库删除
$ git commit -m "text.txt"
Github远程仓库
如何将本地的文件传到Github,又如何从别人的Github上下载代码呢?
下载代码
$ git clone git@github.com: michaelliao/gitskills.git
#冒号后面是分享代码的账户名和其仓库名
上传Github,首先需要注册一个Github账号,建立一个自己的仓库,添加本地生成的公钥,目的是让远程仓库授权你的本地仓库才可以提交代码。
#将本地的仓库关联到Github上michaelliao/learngit.git仓库命名为origin
$ git remote add origin git@github.com: michaelliao/learngit.git
$ git push -u origin master #本地所有内容推送到远程库上
$ git push origin master #之后更新不用加-u
$ git remote #查看远程库
$ git remote -v # 远程库详细信息
$ git push origin dev #推送其他分支
$ git pull #抓取远程别人的新提交
# 设置本地分支与远程分支一致
$ git branch --set-upstream-to=origin/dev dev
分支管理
$ git branch #查看分支
$ git checkout -b dev #切换到dev分支
#等价于
$ git branch dev #生成新分支
$ git checkout dev #切换新分支
$ git merge dev #合并分支,一般不用这个
# 禁用fast forward 协同开发时更常用
$ git merge --no-ff -m "merge with no-ff" dev
$ git branch -d dev # 删除分支
$ git branch -D dev #强行删除分支
# 也可以用switch切换,更常用
$ git switch -c dev #切换到dev分支
#等价于
$ git branch dev #生成新分支
$ git switch dev #切换新分支
#查看分支合并图
$ git log --graph --pretty=oneline --abbrev-commit
$ git log --graph
$ git rebase # 变基操作,将提交分叉整理为直线
#打标签
$ git tag #查看所有标签
$ git tag v1.0 #当前版本打标签
$ git tag v0.9 f52c633 #之前某版本打标签
#打标签并添加说明
$ git tag -a v0.1 -m "version 0.1 released" 1094adb
$ git show v0.1 #查看标签说明
$ git tag -d v0.1 #删除标签
$ git push origin v1.0 #推送某标签
$ git push origin --tags #推送全部尚未推送的本地标签
$ git push origin :refs/tags/v0.9 # 删除远程标签
现场保护
$ git stash #把当前的工作现场”储藏“起来,现在可以做其他紧急的事
$ git stash list #查看保存的现场
$ git stash pop #恢复现场,现在可以继续之前的工作
$ git cherry-pick 4c805e2 #添加修复bug时的内容,避免重复劳动
网友评论