Git学习

Git的官方网站

主要参考廖雪峰老师的Git教程自己整理了下,方便以后回顾。

Git是最好用的分布式版本控制系统。可以很方便的进行代码管理,修改,协作。CVS及SVN都是集中式的版本控制系统。

1.安装Git。在Windows下安装时,可安装Tortoisegit配合使用。Tortoisegit为Git的可视化界面客户端,方便代码的上传。

以下是ubuntu安装

$ git  //查看有没有安装,
$ sudo apt-get install git   //没有就安装一下

2.创建版本库。版本库又名仓库,英文名repository。是一个文件。里面所有文件修改都能被Git跟踪。
把一个项目提交到本地仓库的步骤为创建空目录;把这个目录变成仓库;把源文件移动到这个目录;在仓库中添加源文件(git add);提交
源文件(git commit -m)
创建一个空目录:
$ mkdir learngit $ cd learngit $ pwd
通过git init命令把这个目录变成Git可以管理的仓库
$ git init

3.把文件添加到版本库
强烈建议使用标准的UTF-8编码。
$ gedit readme.txt //在版本库文件夹下创建一个readme.txt文件,输入Git is a version control system. Git is free software.
$ git add readme.txt //把文件添加到仓库
$ git commit -m "wrote a readme file" //把文件提交到仓库, -m 后面输入的是本次提交的说明
也可以一次提交多个文件(多次添加)
$ git add file1.txt
$ git add . //添加全部 $ git add file2.txt file3.txt $ git commit -m "add 3 files."
// PS:在本地库添加文件后,需要add 和 commit命令提交到本地仓库
//后面更新时,只需要push到远程仓库就好
4.一些常用的命令
$ git status //时刻掌握仓库当前的状态,哪些被修改了,添加了,提交了。
$ git diff readme.txt //查看具体修改了什么内容
$ git log //显示从最近到最远的提交日志 ,最前面的字符是版本号 ,以便确定要回退到哪个版本
$ git log --pretty=oneline  //简单显示从最近到最远的提交日志 ,
$ git reflog //查看命令历史,以便确定要回到未来的哪个版本
$ git diff HEAD -- readme.txt //查看工作区和版本库里面最新版本的区别
$ git stash list //查看工作现场

5.版本回退
$ git reset --hard HEAD^ //HEAD表示当前版本,上一个版本就是HEAD~1,上上一个版本就是HEAD~2,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
$ git reset --hard 3628164 //指定回到未来的某个版本,数字对应版本号的前几位
注意Windows下cmd命令行的换行符为“^",所以cmd下改为后面带有数字的较为稳妥。


6.解释
git add命令实际上就是把要提交的所有修改放到暂存区(Stage)
执行git commit就可以一次性把暂存区的所有修改提交到分支
7.撤销修改
$ git checkout -- file //丢弃工作区的修改,工作区即为当前目录下的修改
$ git reset HEAD readme.txt //把暂存区的修改撤销掉(unstage),重新放回工作区,再由工作区丢弃

8.删除文件
$ rm test.txt //删除工作区文件
$ git rm test.txt    //从版本库中删除该文件,并且git commit
$ git commit -m "remove test.txt"
$ git checkout -- test.txt  //其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

9.远程仓库
$ ssh-keygen -t rsa -C "youremail@example.com" //创建SSH Key,填入自己的邮箱地址
登陆GitHub,打开“Account settings”,“SSH Keys”页面

点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
点“Add Key”
添加远程库
登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库。
在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。
接下来关联到Github账户
$ git remote add origin git@github.com:LFself/learngit.git  //把上面的LFself替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库。
添加后,远程库的名字就是origin,这是Git默认的叫法
$ git push -u origin master //把本地库的所有内容推送到远程库上
$ git push origin master //本地作了提交后,把本地master分支的最新修改推送至GitHub
$ git push -f  //暴力提交
登陆GitHub,创建一个新的仓库,名字叫gitskills。勾选Initialize this repository with a README
$ git clone git@github.com:michaelliao/gitskills.git //将远程库克隆(复制)到本地库
$ cd gitskills //查看下 $ ls

10.分支管理
$ git checkout -b dev //git checkout命令加上-b参数表示创建并切换到dev分支
$ git branch //查看当前分支
对readme.txt做个修改,加上一行:Creating a new branch is quick.
$ git add readme.txt //添加并提交 $ git commit -m "branch test"
$ git checkout master   //切换回master分支
$ git merge dev       //把dev分支的工作成果合并到master分支上
$ git branch -d dev   //删除dev分支
$ git log --graph --pretty=oneline --abbrev-commit    //查看分支合并图
$ git merge --no-ff -m "merge with no-ff" dev    //--no-ff参数,表示禁用Fast forward(快速合并),-m后面是说明
$ git stash   //把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git checkout -b issue-101   //在当前分支上修复,就从当前分支创建并切换到临时分支
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支
$ git stash pop   //恢复工作现场的同时把stash内容也删了
$ git stash list  //stash 没有东西了。
$ git stash apply stash@{0}   //可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash
$ git branch -D feature-vulcan   //丢弃一个没有被合并过的分支,强行删除

多人协作
$ git remote  //查看远程库的信息
$ git remote -v //显示更详细的信息
本地新建的分支如果不推送到远程,对其他人就是不可见的
$ git checkout -b branch-name origin/branch-name //在本地创建和远程分支对应的分支
$ git push origin dev //把dev分支上的所有本地提交推送到远程库,dev与远程库一致 如果推送失败,先用git pull抓取远程的新提交
$ git pull //把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突
$ git branch --set-upstream branch-name origin/branch-name //git pull提示“no tracking information”,创建本地分支和远程分支的链接关系

11.标签管理。指向某个commit的指针
$ git checkout master //切换到需要打标签的分支上
$ git tag v1.0 //打一个新标签v1.0
$ git tag
//查看所有标签
$ git log --pretty=oneline --abbrev-commit    //找到历史提交的commit id
$ git tag v0.9 6224937     //对特定版本打标签
$ git show v0.9 //查看v0.9的标签信息
$ git tag -a v0.1 -m "version 0.1 released" 3628164 //创建带有说明的标签
$ git tag -d v0.1
//删除v0.1版本
$ git push origin v1.0   //推送v1.0标签到远程
$ git push origin --tags   //一次性推送全部尚未推送到远程的本地标签

删除远程标签
$ git tag -d v0.9 //先从本地删除
$ git push origin :refs/tags/v0.9 //从远程删除 ,登陆GitHub查看是否删除

12.使用GitHub
如何参与一个开源项目呢?(如bootstrap)
点“Fork”就在自己的账号下克隆了一个bootstrap仓库,
git clone git@github.com:michaelliao/bootstrap.git   //克隆到本地
干完活后,往自己的仓库推送。再在GitHub上发起一个pull request

在Git工作区的根目录下创建一个特殊的.gitignore文件 //把要忽略的文件名填进去,Git就会自动忽略这些文件
.gitignore也提交到Git
$ git add -f App.class   //当文件被忽略时,用-f强制添加文件到Git
$ git check-ignore -v App.class  //检查App.class违反了哪个规则,然后修改对应的规则。

13. 配置别名
$ git config --global alias.st status   //以后st就表示status
$ cat .gitconfig   //在用户主目录下,查看当前用户的Git配置文件

14.搭建Git服务器

15.从本地上传文件的一个具体实例。
本地创建版本库---把文件添加到版本库---建立远程链接,上传到Github
PS:可以一次上传多个文件到版本库;在本地合并后,再远程提交;远程直接删除比较方便。

16.git修改提交作者和邮箱
// 设置全局 
$ git config --global user.name "Author Name" 
$ git config --global user.email "Author Email" 
// 或者设置本地项目库配置 
$ git config user.name "Author Name" 
$ git config user.email "Author Email"

 17.上传到Gitblit失败原因分析

1.远程端的地址不要写错了。不要有空格等符号

2.远程端有文本,先拉取过来,合并后,再上传到远程端。





posted @ 2017-10-03 14:32  newer92  阅读(197)  评论(0编辑  收藏  举报