GIT笔记

GIT

git init

初始化git仓库,会在目录下生成一个.git的隐藏文件,里面保存着本地库的版本管理信息

git status

git status命令可以让我们时刻掌握仓库当前的状态

  • 以下代码表示README.md文件在master分支下被修改
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

  modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

git diff

虽然Git告诉我们README.md被修改了,但如何能看看具体修改了什么内容呢,我们就使用git diff <文件名>

  • 可以看到README.md文件版本的变化(使用q退出diff)
diff --git a/README.md b/README.md
index d8036c1..013b5bc 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.
\ No newline at end of file

git log

git log命令显示从最近到最远的提交日志

  • git log可以看到你由近到远的提交记录
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: xxx
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: xxx
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: xxx
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file

git reset

git reset 切回指定版本,

  • 用HEAD表示当前版本,
  • 上一个版本就是HEAD^,
  • 上上一个版本就是HEAD^^,
  • 当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
  • 或者是指定commit id(版本号没必要写全,6-7位就可以了,Git会自动去找。)

git reset --hard HEAD^回到上一个版本

git reset 撤销暂存区

git reset HEAD <文件名>从暂存区中移除该文件

git reflog

Git提供了一个命令git reflog用来记录你的每一次命令

  • 使用场景:现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?当你reset到上几个版本后反悔了想要回到之前的版本就可以使用git reflog查看之前执行的命令和对应的commit id这样就可以根据commit id回到指定的版本了

小结一波:

三个关键词:工作区,暂存区,版本库

暂存区的概念

我们执行git add指令后代码被提交到了哪?其实就是被提交到了暂存区,对应.git/index(stage)文件就是暂存区

HEAD的概念

HEAD其实就是一个指针指向当前分支,如我们当前是master分支HEAD就指向master分支,我们执行完add将代码提交到暂存区,再执行commit方法就把暂存区的东西一次性提交到HEAD指向的分支
git管理的是修改而不是文件,如何理解?第一次修改 -> git add -> 第二次修改 -> git commit 我们可以看出只有第一次修改被提交就是因为git提交的只是修改的记录而不是整个文件,第二次的修改记录不存在暂存区中所以没被提交

分支(branch)

上面提到HEAD和master分支,HEAD是指向当前分支的,如果当前分支是master那么HEAD就是指向master,而master是指向当前分支的最后一次提交。
现在我们在master指向的提交上建立一个分支dev,并且使用dev分支,这是HEAD就指向dev分支,而dev就指向创建分支时对应的master分支指向的提交,接下来在dev分支上进行一次提交,这时master分支还是指向master分支的最后一次提交,dev分支指向了最新的dev分支上的提交,HEAD指向了dev

git branch <分支名>

创建分支。git branch dev创建dev分支

git branch

列出所有分支,当前分支前有*(HEAD指向的分支)

git branch -d <分支名>

该命令用于删除分支

git checkout -d dev

git branch --set-upstream <本地分支名> origin/<远程分支名>

该命令用于本地分支和远程分支的关联

git branch --set-upstream dev origin/dev

-checkout

git checkout -- <文件名> 注意:中间的--很重要没有--就变成了切换分支的命令了

撤销操作:简而言之,就是让这个文件回到最近一次git commit或git add时的状态。
如果该文件在暂存区中有修改记录,那么git checkout -- <文件名>就回到暂存区的状态
如果该文件没有被提交到暂存区,那么git checkout -- <文件名>就回到版本库的状态

git checkout <分支名>

切换分支。git checkout dev切换到dev分支

git checkout -b <分支名>

创建并且切换到该分支

git checkout -b dev

git checkout -b <本地分支名> origin/<远程分支名>

创建本地分支并关联相应的远程分支,本地和远程分支的名称最好一致

git checkout -b dev origin/dev
  • 相当于
git branch dev
git checkout dev

git config

  • 查看当前目录下的config配置列表
git config --list
  • 配置全局config
# 配置全局用户名
git config --global user.name 'XXX'
  • 配置项目私有config
# 配置项目私有用户名
git config --local user.name 'XXX'

git clone

  • 克隆远程仓库master分支到本地
# 克隆远程仓库到本地目录
git clone xxx
  • 克隆远程仓库其他分支到本地
git clone -b 分支名 git远程地址
  • 查看本地仓库分支
git branch

git tag 给当前仓库添加标签主要用来设置版本号

  • 给本地仓库添加标签
git tag -a v0.1 -m 'v0.1'
  • 将本地残酷标签推送到远程仓库
git push --tag

添加本地GIT忽略清单文件

  • 在代码库文件夹的根目录添加一个.gitignore文件,此文件用于说明忽略的文件有哪些

将github上的项目移至本地

  • 方法1:
git init
git remote add origin github地址      //添加origin
// git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master                //从origin源下更新master分支
// git pull origin master:master 合并分支名相同可以简化为 git pull origin master
  • 方法2:
git init
// git clone <版本库的网址> <本地目录名>
git clone github地址                      //克隆
git clone -b 指定的分支名字 github地址     //克隆某分支

将本地代码提交到github上

  • 方法1:
// 远程主机名:可以在.git下config remote下查看
// <远程分支名><本地分支名>:本地的哪个分支提交到远程的哪个分支
// git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master                //先commit到本地后,push到origin源master分支上
// git push origin master:master 合并分支名相同可以简化为 git push origin master

GitLab/GitHub SSH关联(mac/linux)

1.检查是否有秘钥对

ls -al ~/.ssh检查是否显示有id_rsa.pub或者id_dsa.pub存在,如果存在请直接跳至第3步。

2.生成秘钥对

ssh-keygen -t rsa -C ”email”,注意这个地方的邮箱地址需要和gitlab/github上对应,一直回车密码可以为空,这样就会在/Users/用户名/.ssh/下生成id_rsa和id_rsa.pub

3.配置GitLab/GitHub SSH

打开GitLab/GitHub关于SSH的配置,一般叫做ssh key。
cat id_rsa.pub
将秘钥复制到GitLab/GitHub的key中

4.修改git配置

git config --global user.name '用户名'
git config --global user.email '刚刚生成秘钥填的邮箱'

5.git clone ssh

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

推荐阅读更多精彩内容

  • 对于一个新的包括submodule的项目调用以下命令即可 或者 配置 首先是配置帐号信息 ssh -T git@g...
    brownfeng阅读 467评论 0 0
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,494评论 0 13
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,631评论 9 163
  • 下午忙完工作打开手机,被唐嫣和罗晋刷屏了,公开恋爱关系了,敢大方承认了,敢一起牵手面对人生的风雨了!祝福他们迈出了...
    愿美好相伴阅读 684评论 0 1
  • 小时候 你和我 像是轻躁狂患者 永远激情无限 你有你的方向,我有我的导航仪 你说你要出淤泥而不染,我说我要濯清涟而...
    smilencexzm阅读 224评论 4 6