zoukankan      html  css  js  c++  java
  • 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^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
    $ git reset --hard 3628164 //指定回到未来的某个版本,数字对应版本号的前几位

    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.远程端有文本,先拉取过来,合并后,再上传到远程端。





  • 相关阅读:
    Manacher算法
    [SCOI2010]生成字符串
    [HNOI2008]GT考试
    矩阵乘法
    关于主席树
    Spring 书籍
    Spark书籍
    TimeMeasure
    Dynamic login
    Image quality evaluation
  • 原文地址:https://www.cnblogs.com/algs/p/7623713.html
Copyright © 2011-2022 走看看