关于Git和GitHub的一些笔记

介绍

Git是一个分布式版本控制软件

GitHub是通过Git进行版本控制的软件源代码托管服务,是全球最大的同性交友平台。

目的

为什么要学习Git和GitHub呢?

工作需要

工作中需要我们需要对项目代码进行管理,目前用的最多的就是Git,这是开发人员的必备技能。

学习需要

优秀的第三方库基本都托管于GitHub上,要想安装这些库就必须使用Git和GitHub,我们可以学习上面大神们的优秀代码和编程技巧思想。

个人名片

将你自己工作中的一些项目和代码放到GitHub上面进行管理。这无疑是对个人能力最好的展示。

Git基础命令

Git配置

//查看git的版本信息
$ git --version 
//获取当前登录的用户
$ git config --global user.name 
//获取当前登录用户的邮箱
$ git config --global user.email "email@example.com"
//获取当前配置的所有信息
$ git config --list

登录Git

//设置git账户,userName为你的git账号
$ git config --global user.name 'laibinzhi' 
$ git config --global user.email 'laibinzhi@gmail.com'

创建一个文件夹

//创建文件夹Android
$ mkdir Android 
//切换到Android目录下
$ cd Android

创建一个文件

//方法一,单纯创建文件
$ touch hello.txt 
//方法二,创建文件并写入内容,单个>箭头表示写入, >>表示追加
$ echo > laibinzhi.html
$ echo >> android.md
echo "这是写入,会覆盖" > laibinzhi.html 
echo "这是追加" >> laibinzhi.html 

初始化Git仓库

//在Android文件夹下初始化一个仓库,此时文件里会到一个.git的隐藏文件夹
$ git init

创建忽略文件

//需要服务器端提交的内容可以写到忽略文件里
$ touch .gitignore
 /*
        .git
        .idea
 */

查看目录

//查看所有目录(包括.开头的文件)
$ ls -al
//查看所有目录(不包括.开头的文件)
$ ls 

查看文件内容

$ cat laibinzhi.html

增加到暂存区中

//添加单个文件到暂存区
$ git add laibinzhi.html
//添加所有文件到暂存区
$ git add --all
$ git add -A

添加到版本库中

$ git commit -m '备注信息'

查看版本

$ git log --oneline

比较差异

  • 暂存区和工作区的差异
$ git diff 
  • 暂存区和历史区的差异
$ ggit diff --cached
  • 历史区和工作区的差异(修改)
$ git diff master

撤销内容

  • 用暂存区中的内容或者版本库中的内容覆盖掉工作区
$ git checkout laibinzhi.html
  • 取消增加到暂存区的内容(添加时)
$ git reset HEAD laibinzhi.html

删除本地文件

$ rm fileName

删除暂存区

//保证当前工作区中没有laibinzhi.html,使用--cached 表示只删除缓存区中的内容
$ git rm laibinzhi.html --cached

回滚版本

//回滚最近的一个版本 git log
$ git reset --hard HEAD/commit_id

分支管理

  • 创建分支
$ git branch dev
  • 切换分支
$ git checkout dev
  • 创建分支并切换分支
$ git checkout -b dev
  • 删除分支
$ git branch -d dev
  • 在分支上提交新的版本
$ git commit -a -m 'dev1'
  • 合并分支
$ git merge dev
  • 分支的合并后显示log
$ git log --oneline --graph --decorate

工作现场

  • 保留工作现场
$ git stash
  • 查看工作现场
$ git stash list
  • 恢复工作现场
$ git stash pop

添加远程的仓库

  • 查看远程库信息
$ git reote -v
  • 在本地创建和远程分支对应的分支
//本地和远程分支的名称最好一致;
$ git checkout -b branch-name origin/branch-name
  • 建立本地分支和远程分支的关联
$ git branch --set-upstream branch-name origin/branch-name
  • 从本地推送分支
//如果推送失败,先用git pull抓取远程的新提交
$ git push origin branch-name
  • 从远程抓取分支
//如果有冲突,要先处理冲突。
$ git pull

标签

tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

新建一个标签

$ git tag <tagname>

命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id。

指定标签信息

$ git tag -a <tagname> -m <description> <branchname> or commit_id

git tag -a <tagname> -m "blablabla..."可以指定标签信息。

PGP签名标签

$ git tag -s <tagname> -m <description> <branchname> or commit_id

git tag -s <tagname> -m "blablabla..."可以用PGP签名标签。

查看所有标签

$ git tag

推送一个本地标签

$ git push origin <tagname>

推送全部未推送过的本地标签

$ git push origin --tags

删除一个本地标签

$ git tag -d <tagname>

删除一个远程标签

$ git push origin :refs/tags/<tagname>

Git常见问题

大小写问题

如果git版本中把一个A.txt文件改为a.txtgit是不会记录这次更改的,因为git不区分同名文件的大小写,很郁闷,只有强制重命名该文件:

git mv --force A.txt a.txt

gitignore文件无法忽略某些文件

想要.gitignore起作用,这些文件不能在暂存区中,.gitignore文件只是忽略没有被暂存的文件,对于已经处于暂存区的文件,加入gitignore文件时一定要先从暂存区移除,才可以忽略。

commit时message备注信息写错了如何修改

$ git commit -m "错误的提交信息"
$ git commit --amend -m "正确的提交信息"

每次push提交是要输入密码,如何解决?

关联远程库的时候,用的是https协议,需要换成ssh,如下git@github.com:XXXXXX就是你的仓库地址
第一次提交会出现验证的警告,输入yes回车就行

$ git remote rm origin
$ git remote add origin git@github.com:XXXXXX
$ git push -u origin master

Git工作情形

dev分支开发还没完成,突然要修改一个紧急bug

  1. 保存工作现场
$ git stash
  1. 切换到主分支master,并创建并切换到修改bug的分支fix_bug_001
$ git checkout master
$ git checkout -b "fix_bug_001"
  1. 在fix_bug_001分支上修改bug并提交
$ git add fix_bug.java
$ git commit -m "finish fix_bug_001"
  1. 修复完bug后,切回到master分支,并完成合并,最后删除fix_bug_001分支
$ git checkout master
$ git merge fix_bug_001
$ git branch -d fix_bug_001

4.接着回到dev分支继续干活并查看保存的工作现场

$ git checkout dev
$ git stash list

5.恢复工作现场

//方法一,先恢复再删除stash内容
$ git stash apply
$ git stash drop
//方法二,恢复的同时也删除stash
$ git stash pop

6.可以多次stash内容,先查看stash列表,再恢复指定的stash

$ git stash list
$ git stash apply stash@{0}

Git终极大福利

Git常见命令行
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,529评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,683评论 3 406
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,905评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,318评论 1 303
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,325评论 6 401
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,754评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,081评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,088评论 0 280
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,653评论 1 327
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,651评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,766评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,359评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,083评论 3 341
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,491评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,654评论 1 278
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,367评论 3 383
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,836评论 2 367