Git 及 Github 学习

Git 安装和使用

目的

通过Git管理Github托管项目代码

下载安装
  • Linux上安装Git,使用命令 sudo apt-get install git
  • windows上安装Git,从Git官网下载安装
  • 安装完成后在桌面单击右键看是否安装成功(在桌面单机右键,看是否会出现[git bush here];如果出现,说明git安装成功)
Git工作区域
  • 工作区(Working Directory)
    • 添加、编辑、修改文件等动作
  • 暂存区
    • 暂存已经修改的文件最后统一提交到git仓库中
  • Git Repository(Git 仓库)
    • 最终确定的文件保存到仓库,成为一个新的版本,并且对他人可见
Git 初始化及仓库的建立和操作
初始化一个新的 Git 仓库
  • 创建文件夹 $:mkdir (file name) --->例如:my-study
  • 在文件内初始化 Git (创建 Git 仓库)
    • cd my-study
    • git init (这条命令生成一个隐藏的 .git 文件夹,用来存储仓库所有信息, 这条命令会将)
基本信息设置
  • 设置用户名
    • git config --global user.name 'XXXXXX'
  • 设置用户邮箱
  • 查看设置
    • git config --list
向仓库中添加文件
  • 用 $:touch 或者 vim 命令创建文件(需要添加的程序代码文件、或者.txt文件,等等)
  • 用 $:git add (files name) 将文件(files name)从 工作区 添加到 暂存区
  • 用 $:git commit -m 'add test.py' 将文件(files name)提交到Git本地仓库
修改文件
  • 修改文件 利用 vi\vim 等编辑器修改文件
  • 用 $:git add (files name) 将文件从 工作区 添加到 暂存区
  • 用 $:git commit -m '这里是添加说明的' 将文件从暂存区提交到Git本地仓库
删除文件
  • (#这是删除文件夹中的文件) $:rm -rf test.py 通过Linux强制删除命令,直接删除文件)
  • 删除文件
    • $:rm test.py
  • 从Git中删除文件
    • $:git rm test.py
  • 提交操作
    • $:git commit -m "说明本次删除原因"
Git 管理远程仓库
使用远程仓库的目的
  • 作用:备份,实现多人的代码共享集中化管理
将本地代码提交到远程仓库
  • (首先clone Github 的远程仓库到本地,然后在本地的仓库进行6.3的操作,再通过 git push 将文件提交到 Github 上。)
  • 用 $:touch 或者 vim 命令创建文件
  • 用 $:git add (files name) 将文件添加到暂存区
  • 用 $:git commit -m 'add test.py'
  • 用 $:git push 将本地仓库提交到远程
Git 克隆操作
解决 git push 错误
    # The requested URL returned error: 403 Forbidden while accessing
    # 答案:私有项目,没有权限,输入用户名密码,或者远程地址采用这种类型

    vi .git/config

    # 将
    [remote "origin"]
        url = https://github.com/'用户名'/'仓库名.git'
    修改为:
    [remote "origin"]
        url = https://'用户名':'密码'@github.com/'用户名'/'仓库名.git  '
Git命令
Git基本命令
  • git help --web log (网页查看历史版本文档)
  • git mv readme readme.md (将readme重命名为readme.md)
  • git --oneline --all -n4 --graph
    • 其中: --oneline (单行显示), --all(显示所有分支), -n4(显示4行), --garph(带分支的演变历史)
  • gitk (图形界面工具查看版本历史,其中颜色相同的表示同一个commit)
  • git config --local --list (查看配置信息)
版本回滚
  • 通过命令 git log 查看历史版本提交记录,用HEAD表示的是当前版本的版本
  • 根据版本commit值可以进行回滚 命令:$ git reset --hard 版本号
  • 如果往前回滚一个版本 命令:$ git reset --hard HEAD^ 注意:一个^表示的是回滚一个版本,^^表示的是回滚两个版本, 回滚一百个版本可以表示为: HEAD~100
  • 如果要再回到最新版本 命令:$ git reflog ; 或者使用命令: git reset --hard commit版本号 来回到未来的版本
忽略文件
  • 我们无需让Git跟踪的目录,在Git目录下创建 .gitignore 的特殊文件(这个文件以英文的句点打头,并没有扩展名)并在文件中添加不需要Git跟踪的文件的文件名,
    • 例如:(__pycache__文件不需要Git跟踪)就在 .gitignore 文件中添加如下内容:__pycache__/
  • 如果你使用的是Python 2.7, 请将这行内容改为*.pyc 。Python 2.7不会创建目录__pycache__,它将每个.pyc文件都存储在相应.py文件所在的目录中。其中的星号让Git忽略所有扩展名为.pyc的文件。

Git branch

分支学习

branch称之为分支,默认只有一个分支名为master的分支。一般开发新功能时会在分支dev上进行,开发完毕之后再合并到master分支。

分支命令
命令 说明
$ git branch 分支名 # 创建分支
$ git checkout 分支名 # 切换分支
$ git checkout -b 分支名 # 或者使用合并命令:(表示创建并切换到新创建的分支)
$ git merge 分支名 # 在切换回到master分支上面之后执行此命令,进行合并分支
注:$ git branch -av # 此命令表示列出所有的分支,并且会在当前所在的分支前加*
$ git branch -m 分支名 # 创建并切换到指定分支
$ git branch # 查看所有分支
$ git branch -d 分支名 # 删除分支
$ git branch -D 分支名 # 强行删除一个没有被合并过的分支

Git stash

stash 用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。

命令
命令 说明
$ git stash # 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
$ git stash list # 查看“某个地方”存储的所有记录
$ git stash clear # 清空“某个地方”
$ git stash pop # 再将某个地方的代码拿回来继续开发, 同时将stash内容删除掉
$ git stash apply # 编号,将指定的编号记录从“某个地方”重新拿到工作区(可能有冲突), 不会删除stash的内容
$ git stash daop # 编号,删除指定编号的记录

Github

命令
  • 将开发完毕的代码推送到GitHub
    $ git remote add origin git@github.com:`github账户名`/`仓库名`.git   # 新的本地仓库第一次关联GitHub仓库
    $ git remote add origin https://github.com/jefxff/my-study.git  # 为地址起一个别名origin
    $ git remote rm origin  # 删除本地已经关联的GitHub远程仓库
    $ git remote -v  # 查看远程仓库信息
    $ git push -u origin master  # 第一次将本地master分支内容以及版本信息推送到Github
    $ git push origin master  # 将本地master分支内容以及版本信息推送到Github
    $ git push origin dev # 将本地dev分支内容以及版本信息推送到GitHub
  • 新的本地Git,需要将代码从GitHub中获取并继续开发,实现不同办公地点同步
    $ git clone git@github.com:`GitHub账户名`/`仓库名`.git   # git://使用ssh,而且不用每次输入密码
    $ git clone https://github.com/jefxff/my-study.git  # http协议速度慢,而且每次输密码  #将项目从Github中获取(默认获取的是master分支,如果需要在其他分支工作,需要创建并切换分支)
    $ git branch dev origin/dev  #创建dev分支且和远程dev分支同步
    $ git push origin dev  #提交dev分支内容到远程GitHub托管仓库的dev
  • 实际情形:在公司开发的代码提交到GitHub,需要再家里继续开发,就需要去github拉取最新的代码
    $ git checkout dev  #切换分支   
    $ git pull origin dev  #从远程Github仓库获取dev分支的最新内容,并合并到本地
    $ vim files / $ git add . / $ git commit -m "开发功能"(再家进行开发并提交)
  • 实际情形:再家更新了部分功能,在公司需要将最新功能从GitHub中拉取,并继续开发
    $ git checkout dev #切换分支
    $ git fetch origin dev   #从GitHub中获取dev分支最新内容到版本库的分支
    $ git merge oirgin/dev   #将版本库的分支内容合并到工作区
    $ vim files / $ git add . / $ git commit -m "开发功能"(再公司开发并提交)
  • 将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题,上文执行过程中执行【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。

  • 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

  • 详细查看 http://www.cnblogs.com/wupeiqi/p/7295372.html 武沛齐的博客

Github协同开发

创建程序
  1. 用户A创建程序,提交到GitHub
  2. 用户B克隆项目
  3. 用户C克隆项目
开发功能
  1. 用户A开发功能1
  2. 用户B开发功能2
  3. 用户C开发功能3
提交
  1. 用户A提交功能1,并push(A用户手速快,先提交。)
  2. 用户B提交功能2,无法push,因为GitHub上已经有其他人提交的新代码。[解决方法]:从GitHub上获取最新代码并合并到本地,提交自己开发的功能2。
  3. 用户C提交功能3,无法push,无法提交,因为GitHub上已经有其他人提交的新代码。[解决方法]:从GitHub上获取最新代码并合并到本地,提交自己开发的功能3。
获取最新代码
  1. 用户A获取最新代码
  2. 用户B获取最新代码
  3. 用户C获取最新代码
注意:

上述中括号中的解决办法可以有三种方式操作, 三者都可以完成合并并提交新功能,但是日志记录会有差异,如:前两者版本记录中会出现合并,而第三种可以保证版本记录干净整洁。

    先 git pull origin master   然后 git push origin master
    先 git fetch origin master  然后 git merge origin/master   再 git push origin master

GIT标签

标签管理

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。默认的去标签是创建在最新提交的commit上的.

创建标签
创建新标签
  • $ git checkout master # 首先切换到需要创建标签的分支
  • $ git tag v1.0 # 敲命令git tag <name>就可以打一个新标签
查看标签
  • git tag # 如果有多个标签,默认的标签的排序是按照字母顺序排列的
查看标签信息
  • git show <tagname>
为提交过的commit创建标签
  • 使用 git log 查看commit 的id 号
  • 使用命令 $ git tag commit id 为之前提交的版本创建标签
标签的参数 -a -m
  • 参数 -a 指定标签名
  • 参数 -m 指定说明文字
  • 例如: git tag -a v0.1 -m "version 0.1 released" 1094adb
操作标签
删除标签(本地)
  • git tag -d <tagname>
推送标签到远程仓库
  • git push origin <tagname>
推送全部未推送标签
  • git push origin --tags
删除已推送到远程的标签
  • git push origin :refs/tags/<tagname>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 3,946评论 3 27
  • 安装Git Git的下载地址:Git官网下载地址 Git本地仓库和命令 配置用户 下载完Git后,右键会有一个Gi...
    TokyoZ阅读 4,494评论 1 7
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,409评论 0 7
  • 安装: windows安装git-- msysgit是windows版的git,下载单独的.exe按照默认选项安装...
    alceyp阅读 684评论 0 0
  • 清晨,崖顶一对年轻男女身背包袱往崖下走去,男子腰间悬剑用手紧紧握住剑柄,而女子头戴银簪,挽着男子的胳膊,三步一回首...
    一寸剑心阅读 253评论 0 1