• Git 入门


    git 入门


    本文只整理了一些常用命令,长期更新完善...
    git的整个工作流程

    以下是一个未被版本控制的文件夹提交到远程仓库的一个简单过程

    git init 初始化一个git仓库,会在该目录生成一个.git文件夹,以后所有文件的变化信息都保存在此目录
    不会像svn在每个目录都生成.svn文件夹。
    git add . 或 git add --all 将所有文件添加到git的索引中。
    git add [路径/文件]... 添加文件夹或文件到git的索引中。
    git commit -m '注释内容' 提交刚刚加入到git索引中的文件到本地仓库。
    git remote add origin https://github.com/chenghuanhuan/test.git 添加该仓库的对应的远程主机。

    upstream & downstream
    git中存在upstream和downstream,简言之,当我们把仓库A中某分支x的代码push到仓库B分支y,此时仓库B的这个分支y就叫做A中x分支的upstream,而x则被称作y的downstream,这是一个相对关系,每一个本地分支都相对地可以有一个远程的upstream分支(注意这个upstream分支可以不同名,但通常我们都会使用同名分支作为upstream)。
    初次提交本地分支,例如git push origin develop操作,并不会定义当前本地分支的upstream分支,我们可以通过git push --set-upstream origin develop,关联本地develop分支的upstream分支,另一个更为简洁的方式是初次push时,加入-u参数,例如git push -u origin develop,这个操作在push的同时会指定当前分支的upstream。

    git push origin develop push代码到远程分支
    git push -set-upstream origin develop 执行此命令后以后每次push都只需执行git push即可
    git push -u origin develop 同上
    此时一个本地文件完整的上传到git服务器了。

    push.default参数设置
    git config --global push.default [simple/matching/nothing/current/upstream]

    • nothing - push操作无效,除非显式指定远程分支,例如git push origin develop(我觉得。。。可以给那些不愿学git的同事配上此项)。
    • current - push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支。
    • upstream - push当前分支到它的upstream分支上(这一项其实用于经常从本地分支push/pull到同一远程仓库的情景,这种模式叫做central workflow)。
    • simple - simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程upstream分支同名,否则会拒绝push操作。
    • matching - push所有本地和远程两端都存在的同名分支。

    因此如果我们使用了git2.0之前的版本,push.default = matching,git push后则会推送当前分支代码到远程分支,而2.0之后,push.default = simple,如果没有指定当前分支的upstream分支,就会收到fatal提示。

    常用命令


    git clone [url] [path] 将一个完整的远程代码库拷贝到本地

    git remote 列出所有远程主机
    git remote -v 查看远程主机的网址
    git remote add origin url 添加一个远程主机
    git remote remove origin/git remote rm origin 删除远程主机
    git clone -o test https://github.com/chenghuanhuan/test.git 克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
    git remote show [主机名] 查看该主机的详细信息。

    git fetch [远程主机名] [分支名]
    此命令执行了两个关键操作

    1. 创建并更新所有远程分支的本地远程分支
    2. 设定当前分支的 FETCH_HEAD为远程分支的master分支(未指定远程分支的情况下)

    git pull [远程主机] [分支名] 从远程分支更新代码到本地分支
    相当于以下两步

    1. git fetch
    2. git merge FETCH_HEAD

    **git rm -r *** 删除目录下所有文件和子目录
    git rm --cached f1 删除文件f1,不会删除本地目录文件,只删除index中的文件记录;将已经git add的文件remove到cache中,这样commit的时候不会提交这个文件, 适用于一下子添加了很多文件, 却又想排除其中个别几个文件的情况.

    git status
    查看版本库的状态。可以得知哪些文件发生了变化,哪些文件还没有添加到git库中等等。 建议每次commit前都要通过该命令确认库状态。

    git push origin :master
    git push origin --delete master
    删除远程分支
    git push origin --tags git push不会推送标签(tag),除非使用--tags选项。

    git branch 查看本地存在的分支
    git branch [分支名] 创建新分支
    git branch -r 查看远程分支
    git branch -a 查看远程和本地的分支
    git checkout [分支名] 切换分支
    git checkout -b [分支名] 切换并创建分支
    git branch -d/-D [分支名] 删除本地分支
    git branch -d -r [远程分支名] 删除远程分支
    git branch -m/-M [旧分支名] [新分支名] 修改分支名

    退回代码到某一个版本


    1. git log
    2. git reset --soft ${commit-id}
    3. git stash
    4. git push -f
      详解如下:

    第1行: git log 查看提交历史,然后找到要回滚的版本 。历史如下,

    • commit 84686b426c3a8a3d569ae56b6788278c10b27e5b
    • Author: JeffLi1993 qiangqiangli1993@gmail.com
    • Date: Fri Apr 8 19:11:32 2016 +0800
    • 我删除了老板的东西
    • commit 72bd6304c3c6e1cb7034114db1dd1b8376a6283a
    • Author: JeffLi1993 qiangqiangli1993@gmail.com
    • Date: Fri Apr 8 19:05:23 2016 +0800
    • add A.txt

    我们想要回滚到的版本就是:72bd6304c3c6e1cb7034114db1dd1b8376a6283a

    第2行:git reset –soft 72bd6304c3c6e1cb7034114db1dd1b8376a6283a

    撤销到某个版本之前,之前的修改退回到暂存区(不懂看漂亮的图哦~)。soft 和 hard参数的区别就是,hard修改记录都没了,soft则会保留修改记录。

    第3行:暂存为了安全起见。

    第4行:git push -f

    将本地master push 到远程版本库中, -f 强制覆盖 。

    基础知识

    文件的三种状态

    1. 已提交(committed)表示该文件已经被安全地保存在本地数据库 中了;
    2. 已修改(modified)表示修改了某个文件,但还没有提交保存;
    3. 已暂存(staged)表示把已修改的文件放在下次提交时要保存的清单中;

    参考资料


    http://www.open-open.com/lib/view/open1460134175743.html
    https://segmentfault.com/a/1190000002783245
    http://www.open-open.com/lib/view/open1328069609436.html

  • 相关阅读:
    c# 把对象加入队列,对象为全局变量,对象改变队列值也跟着改变
    C# 一个数组未赋值引发的错误
    c# 2016QQ自动登录程序
    当时钟事件声明为过程变量 让system.threading.timer时钟失效
    if 循环的深入理解 哈希表的一种应用
    VB6对象与地址相互转换
    VB6的函数指针传递
    .net framework 4.0 从 GAC 卸载 程序集
    .net framework 4.0 从 GAC 卸载 程序集
    GAC in CLR 3.0
  • 原文地址:https://www.cnblogs.com/smile361/p/5568292.html
Copyright © 2020-2023  润新知