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

    官方教程

    如果觉没有目录得看得难受,可以在这看:Pro git 2



    一、git介绍

    从个人角度上来说,git可以干嘛?

    • 管理github等代码托管平台上的仓库,如果要做开源项目,必须要用到git,公司项目代码保存也是git或svn

    • 下载github代码,还是觉得下zip方便...

    • 版本控制,这才是git的正确用途,也是其初衷。比如你写代码,写着写着觉得写错了,想回到以前的某个状态,你再ctrl+Z得多麻烦,git就能帮你解决此问题



    二、git安装&获取仓库

    • 安装好git第一步,设置自己的身份信息。Win10右键文件资源管理器即可调出git bash,使用的linux shell习惯
    git config --global user.name "John Doe"
    git config --global user.email johndoe@example.com
    # 查看信息
    git config --list
    
    • 第二步,有代理就设置代理
    # 设置
    git config --global http.proxy http://127.0.0.1:7890
    git config --global https.proxy https://127.0.0.1:7890
    # 查看
    git config --global http.proxy
    git config --global https.proxy
    # 取消
    git config --unset http.proxy
    git config --unset https.proxy
    
    • 获取git仓库
    # 本地建立仓库: 进入一个文件夹
    git init  # 此文件夹就会被存放仓库
    
    # 克隆(下载)远程仓库,会新建目录,后面可以再追加一个目录名用于重命名
    git clone https://github.com/*/*  # https
    git clone git@github.com:*/*      # ssh
    
    linux建议使用SSH,方便 push,而Windows使用https比较方便,后面<a href="#五、远程仓库">远程仓库时</a>会说
    



    三、记录每次更新到仓库

    3.1 追踪文件

    git的文件有三种状态(位置): 已修改、暂存区、仓库

    • 一个新文件或一个仓库中的文件被修改,那它就处于已修改状态;

    • 使用 git add 命令可以追踪新文件、添加已修改文件到暂存区;

    • 最后使用 git commit -m “” 命令提交暂存区的文件到仓库,他默认需要一个注释,可以帮助你回忆你这次修改的内容,github也会显示此注释



    3.2 查看文件状态

    • git status

      status 能显示未追踪的文件、新追踪还没commit的文件、已修改的文件等, -s 选项能查看简况

    • git diff

      diff 只能查看仓库中 被修改后 还未add的文件,它能查看文件内容做了哪些修改



    3.3 提交文件到仓库

    常规入库流程: add ——> commit -m

    优点是能分批,把不同的文件打上不同的注释

    如果不想多打一行 add * 命令,又没有新追踪文件,可以使用 commit -a -m ""

    能提交所有被修改过的被追踪(仓库中)的文件,但是不推荐使用 -a,因为当你想要撤销操作的时候很麻烦



    3.4 移除文件、取消跟踪、重命名和移动

    删除文件的两种办法:

    • git rm ,再 commit

    • 如果直接在文件管理器删除了文件,又修改了被追踪的文件,最后 add ——> commit -m

      你会发现,用 status 查看,删除文件的这一步还是没被提交,解决方法是:

      文件资源管理器删除文件,再 commit -a -m ""

    取消跟踪,即从仓库中删除记录,但仍将文件保留在硬盘上,后续记得加入.gitignore

    • git rm --cached

    重命名和移动:

    • git mv ,不要使用文件资源管理器移动或重命名,git无法跟踪。git mv 其实是 rm + add



    3.5 忽略追踪某些文件

    如果不希望某些文件被追踪,可以新建 .gitignore 文件,用于存放忽略规则,当你将此文件追踪、提交后,规则就生效

    当规则生效后,你不应当使用 add * ,它无法追踪任何文件。而应该使用 add .

    忽略追踪规则的格式如下

    • 所有空行或者以#开头的行都会被 Git 忽略。

    • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。

    • 匹配模式可以以(/)开头防止递归。

    • 匹配模式可以以(/)结尾指定目录。

    • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

    glob即简化的正则表达式,让我们看看一些例子以方便理解:

    # 忽略所有的 .a 文件
    *.a
    
    # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
    !lib.a
    
    # 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
    /TODO
    
    # 忽略任何目录下名为 build 的文件夹
    build/
    
    # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
    doc/*.txt
    
    # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
    doc/**/*.pdf
    



    四、撤销操作、日志与版本回退

    除非要回退某个文件到之前的某个版本,否则无需撤销操作,继续修改继续提交即可

    4.1 回滚已修改文件

    • 当你的某个文件处于工作区时,如果你修改后觉得不妥,想撤销操作,回到最近一次提交的版本

      git checkout -- <file>

    • 当你的文件被add到暂存区,想要将其退回到工作区时

      git reset HEAD <file>

      git restore --staged <file> 文档里说的是reset,但是status提示的是restore 。参考

      没必要将文件退回到工作区,不commit,继续修改和add即可。除非要checkout



    4.2 commit后的回滚

    • 查看git日志、提交历史

      git log commit后面一段很长的字符串为索引,(HEAD -> master)意思是HEAD是一个指针,他总指向最近一次提交

      用 -p 参数可以查看更仔细的日志,包含每次提交的改动细节

      用 -3 等数字可以限制只输出最近几次提交的日志,q 退出

    • 当你commit提交文件时遗漏了某些文件,或者注释有误

      git commit --amend

    $ git commit -m 'initial commit'
    $ git add forgotten_file
    $ git commit --amend -m ""  # 会将暂存区文件提交,且两次提交只有一次记录,采用后者的注释
    
    • 当你commit、push提交的文件有误,你想撤销commit操作时

      • 简单安全的做法是修改后再次提交

      • 如果要回到上一次提交的版本,可以撤销commit操作,但这可能存在风险

    git revert HEAD  
    # HEAD 指向最近一次提交,你也可以通过log获取索引来撤销之前的某次commit
    # 会生成一次 commit 日志
    # :q 返回终端
    git push origin master
    
    • git reset 撤销编辑、撤销提交

      首先我们要了解Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。如下图

      此时本地仓库对应的是commit4,git reset 可以让本地仓库对应的指针变为commit3或是commit1等之前的版本,当然,也可以变为commit4之后的某个commit,如commit5

      Git 的分支,其实本质上仅仅是指向提交对象的可变指针。参考

      • git reset --hard HEAD 将暂存区、工作区中的内容恢复成上一次提交的版本(快照),换句话说你没commit的内容都会被擦除。如果你刚commit,想撤销这次commit,那么可以把HEAD换成其它索引(危险!会丢失工作内容,建议采取下面的--soft)

      • git reset --soft <index> 将HEAD指向指定的索引,即回退到某个版本,假设从4回到3,那么3往后的操作会被放到暂存区。参考

      reset和分支有关,如果操作后无法push,可以使用 -f 强制push



    五、远程仓库

    创建仓库后,使用clone即可将仓库克隆到本地,后续还能使用pull

    但是push需要身份验证

    Windows会直接跳转网页要求认证,后续无需认证。使用https比较方便,而且Windows挂梯子扶墙也比较容易

    Linux建议使用SSH链接,使用https链接每次都需要输入账号密码,或需要配置文件,而且https会被墙,相比之下ssh就能流畅访问

    linux使用ssh连接github步骤

    • 生成ssh密钥
    ssh-keygen # 生成ssh key,默认即可,一直回车,最后会生成一对公钥和私钥文件
    # -t 指定密钥类型,默认是 rsa ,可以省略。
    # -C 设置注释文字,比如邮箱。
    
    cat /root/.ssh/id_rsa.pub # 将公钥内容复制
    
    • github添加公钥

      登录 GitHub,打开 Personal settings 页面,选择 SSH and GPG keys 选项添加

    • 测试

      ssh -T git@github.com

    如果之前 clone 了 https 的链接,导致origin是https的,更改origin的方法是:

    # 查看远程仓库地址
    git remote -v
    # 删除
    git remote rm origin
    # 添加
    git remote add origin [url]
    



  • 相关阅读:
    二分图 洛谷P2055 [ZJOI2009]假期的宿舍
    并查集 洛谷P1640 [SCOI2010]连续攻击游戏
    贪心 洛谷P2870 Best Cow Line, Gold
    贪心 NOIP2013 积木大赛
    快速幂 NOIP2013 转圈游戏
    倍增LCA NOIP2013 货车运输
    树形DP 洛谷P2014 选课
    KMP UVA1328 Period
    动态规划入门 BZOJ 1270 雷涛的小猫
    KMP POJ 2752Seek the Name, Seek the Fame
  • 原文地址:https://www.cnblogs.com/yunmuq/p/14790807.html
Copyright © 2011-2022 走看看