zoukankan      html  css  js  c++  java
  • git 快速上手


    一、基本使用
    1.配置个人信息

    $ git config --global user.name "yourname"
    $ git config --global user.eamil "youremail"

    2.创建版本库

    $ mkdir demo
    $ cd demo

    3.init版本库

    $ git init

    建立好仓库以后,仓库中多出一个.git文件夹,这个文件夹里面保存记录版本库的一些信息。

    添加文件到版本库中
    添加一个readme.md到版本库中,
    比如用notepad++新建一个readme.md随意编写内容。

    $ git add readme.txt
    $ git commit -m "create a readme file"
    [master (root-commit) e6abfbe] create a readme file
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 readme.md

    -m是后面输入本次提交的说明,可以是任意有意义的内容。

    $ git add <filename>
    $ git commit -m <massage>

    注:git只能跟踪文本文件的改动,比如txt、网页、所有程序代码等等,而图片视频Microsoft word等文件的改动不能被识别。另外,文本是有编码的,强烈建议使用utf-8编码。(不要用Microsoft自带记事本,不要用,不要用!)

    版本控制
    如果现在对某个文件,比如README.md更改内容为
    Git is a distributed version control system.

    输入git status命令:

    $ git status
    On branch master
    Your branch is up to date with 'origin/master'.
    
    Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git restore <file>..." to discard changes in working directory)
    modified: README.md
    
    no changes added to commit (use "git add" and/or "git commit -a")

    git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,README.md被修改过了,但还没有准备提交的修改。
    git diff README.md可以查看具体的修改。
    git log可以查看历史记录
    commit 2ae605540dd4a194aa9c7b93ea8e26c664a3fa69 (HEAD -> master, origin/master)中后面的一串字符串是commit id,就是每次的提交都会有一个id,用于区分每次的commit。

    1.版本回退
    git中,用HEAD表示当前版本,就是最新的这一次提交,上一版本是HEAD^, 上上个版本是HEAD^^,上100个版本是HEAD~100。
    Git允许我们在版本的历史之间穿梭,使用命令 git reset --hard commit_id。
    如果回退过去后又后悔了,需要在git relog中找到目标的commit id。
    穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
    要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

    2.git暂存区
    项目工作区中有一个.git文件,它是一个版本库,里面存放了很多东西,最重要的就是称为stage的暂存区,还有git自动创建的第一个分支master,以及指向master的一个指针HEAD。
    我们在为版本库中添加文件,是分成两步:
    1.git add其实是将文件修改添加到暂存区。
    2.git commit其实是把暂存区的所有内容提交到当前分支。

    另外注意一个坑,当新建一个空文件执行git add添加这个文件,然后在这个文件中添加代码,后执行git commit,这是版本库不会将对文件添加的内容提交到分支。这是为什么呢?
    这是因为git管理的是修改,当用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

    那怎么提交第二次修改呢?

    可以继续git add再git commit,也可以别着急提交第一次修改,先git add第二次修改,再git commit,就相当于把两次修改合并后一块提交了:
    第一次修改 -> git add -> 第二次修改 -> git add -> git commit

    3.撤销修改
    如果在某个文件中进行修改了,在准备提交的时候,这时突然想撤销这次的修改,当然可以通过版本回退进行撤销,但是如果修改了许多文件,而只想撤销掉对其中的一个文件的修改呢,用版本回退后会很麻烦。

    在这里可以通过git checkout -- file来丢弃某个文件在工作区中的修改
    把文件在工作区的修改全部撤销,这里有两种情况:
    一种是此文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    一种是此文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    总之,就是让这个文件回到最近一次git commit或git add时的状态。
    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

    4.删除文件
    git rm file删除版本库中的某文件。

    二、为github账户设置ssh
    1.创建SSH Key:

    $ ssh-keygen -t rsa -C "youremail@example.com"

    如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

    2.配置github ssh
    登陆GitHub,打开“Account settings”,“SSH Keys”页面:
    然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,最后"Add Key"。

    为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
    当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
    最后友情提示,在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。
    如果你不想让别人看到Git库,有两个办法,一个是交点保护费,让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的。这个方法我们后面会讲到的,相当简单,公司内部开发必备。
    确保你拥有一个GitHub账号后,我们就即将开始远程仓库的学习。

    三、github项目的上传与下载
    1.cd到项目根目录中,在命令行中输入

    $ git init

    把这个文件夹变成Git可管理的仓库

    2.关联具体的代码仓库

    $ git remote add origin xxxx

    xxxx是ssh地址

    3.将本地库推送到远程

    $ git push -u origin master

    如果远程仓库中包含本地不存在的文件(比如README.md),那么会报错

    error: failed to push some refs to 'git@github.com:xxx'

    解决方案:

    $ git pull --rebase origin master
    $ git push -u origin master

    4.从远程仓库克隆

    $ git clone ssh_add

    将远程仓库拷贝到本地。

    四、分支管理
    1.创建与合并分支
    在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
    一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

    每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

    当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

    基本命令:

    查看分支:git branch
    创建分支:git branch <name>
    切换分支:git checkout <name>或者git switch <name>
    创建+切换分支:git checkout -b <name>或者git switch -c <name>
    合并某分支到当前分支:git merge <name>
    删除分支:git branch -d <name>

    2.解决冲突
    当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
    解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
    用git log --graph命令可以看到分支合并图。

    更新中…
    参考:https://www.liaoxuefeng.com/wiki/896043488029600

    如果出现报错

    fatal: not a git repository (or any of the parent directories): .git

    先git init

    The authenticity of host 'github.com (13.250.177.223)' can't be established.
    RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    Host key verification failed.
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.
    The authenticity of host 'github.com (13.250.177.223)' can't be established.
    RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

    在这里输入yes。

  • 相关阅读:
    【字符串】C语言_字符串常量详解
    2138=数据结构实验之图论三:判断可达性
    3363=数据结构实验之图论七:驴友计划
    1916=字符串扩展(JAVA)
    2140=数据结构实验之图论十:判断给定图是否存在合法拓扑序列
    3364=数据结构实验之图论八:欧拉回路
    2138=数据结构实验之图论三:判断可达性
    2271=Eddy的难题(JAVA)
    2246=时间日期格式转换(JAVA)
    2804=数据结构实验之二叉树八:(中序后序)求二叉树的深度
  • 原文地址:https://www.cnblogs.com/LMIx/p/12677847.html
Copyright © 2011-2022 走看看