git的基本使用

git原理.png

git使用

Git学习推荐廖雪峰老师的Git教程
安装之后设置

  1. 设置用户名和邮箱
设置或者更改用户名和邮箱地址
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
查看用户名和邮箱地址
$ git config --global user.name 
$ git config --global user.email 
  1. 创建一个版本库(仓库repository)
打开Git Bash 在自己想要的目录下创建
$ cd xxxx
$ git init 
Initialized empty Git repository in E:/repository/img/.git/
# git init 用于把当前目录变成一个可以管理的仓库
  1. 把文件放到Git仓库
    在当前目录下游一个.git的目录。此目录是用来跟踪管理版本库的,不能乱改
    在管理的目录或者子目录建立一个文件(git只能管理这里面的文件)。 把文件放到Git仓库只需两步
  • git add xxx 告诉Git,把文件添加到仓库 xxx 为文件可以是多个文件 提交到暂存区
  • git commit -m告诉Git,把文件提交到仓库 -m 为提交说明 提交到分支
  • 两个一起就是提交到仓库
  1. 常用命令
git status 查看结果(查看文件的状态)
git diff 查看文件的修改内容
git log 查看当前版本和此版本修改之前的历史记录
git log --pretty=oneline  一行显示
git reset --hard HEAD^  回退到上一个版本  HEAD表示是当前版本 HEAD^^上上个版本 HEAD~(number)回退到第number个版本

git reflog 打印对分支的更改记录 (可以用来记录之前commit命令的commit id)
git reset --hard commit id  重新回到commit id 的新版本  这两个命令用于还原之前被回退的版本
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

工作区(Working Directory)
就是你在电脑里能看到的目录
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

git checkout --file  撤销修改(未添加到暂存区)现在一般用 git restore

如果要撤销修改add过的文件可以使用git reset HEAD file 重新回到工作区再调用git checkout --file 丢弃工作区的修改

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

新版本的另一个种修改方法

命令 作用 备注
git restore --worktree file 表示撤销file文件工作区的修改 参数等同于-W
git restore --staged file 表示插销暂存区的修改,将文件状态恢复到add之前 参数等同于-S
git restore -s HEAD~1 README.md 表示将当前工作区切换到上个 commit 版本
git restore -s dbv213 README.md 表示将当前工作区切换到指定 commit id 的版本
git restore file 撤销工作区的修改返回这里有两种情况一是修改没有放进暂存区撤销就和版本库中一模一样,二是存放进了暂存区撤销撤销就是回到暂存区后的状态

删除文件也是一种修改

如果在工作去删除了文件有两个选错,一是确定从仓库中删除文件git rm file并且git commit -m 二是误删想恢复可以用 git checkout --file或者git restore file

  1. 创建SSH key 将GitHub作为自己的remote端服务器
    第一步:在用户主目录下,查看有么有.ssh目录,再看看这个目录下有么有SSH Key秘钥对id_rsa和id_rsa.pub两个文件
    第二步 如果有进入下一步,没有打开Sell(Windows打开Git Bash),创建SSH Key;$ ssh-keygen -t rsa -C "youremail@example.com"
    代码参数含义:
    -t 指定密钥类型,默认是 rsa ,可以省略。
    -C 设置注释文字,比如邮箱。
    -f 指定密钥文件存储文件名。

    以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如:

Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]

当然,你也可以不输入文件名,使用默认文件名(推荐),那么会生成id_rsa(私钥不能泄露出去)和id_rsa.pub(公钥,可以放心地告诉任何人)两个秘钥文件


接着又会提示你输入两次密码(该密码是push文件的时候要输入的密码而不是gihub管理者的密码)当然,也可以不输入密码,直接按回车。那么在push的时候就不需要输入密码,直接提交到GitHub上
第三步:添加SSH Key到github上面去
登上GitHub,打开Settings, SSh and GPG keys页面然后,点击new SSH Key ,天上任一Title,在Key文本框里把id_rsa.pub的内容复制到这里。
为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
在github上创建一个仓库,把本地仓库的内容推送到GitHub仓库git push 仓库名 分支
git remote add origin git@github.com:hwb5522/learn.git
git push -u origin master以后只需要git push origin master
在github克隆远程仓库git clone
git clone git@github.com:hwb5522/gitskills.git
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

  1. 分支
    查看分支git branch
    创建分支git branch <name>
    切换分支git checkout <name>或者git switch <name>
    创建+切换分支:git checkout -b <name>或者git switch -c <name> 合并某分支到当前分支git merge <name> 删除分支:git branch -d <name>`
    解决合并冲突:就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
    用git log --graph命令可以看到分支合并图。

git log --graph --pretty=oneline --abbrev-commit


通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
$ git merge --no-ff -m "merge with no-ff" dev


git stash把当前工作现场“储藏”起来,等可以以后恢复现场后继续工作
git stash list 查看“储藏”的工作现场
恢复方法:git stash apply恢复,在用git stash drop 删除;另一种是:git stash pop 恢复的同事吧stash内容也删除了

  1. 修复bug
    通常创建新的bug分支进行修复,然后合并,最后删除分支;
    当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
    在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。(commit为修改bug的分支提交修改的commit id)

  1. Feature分支
    开发一个新功能最好新建一个分支,如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name> 强行删除。

  1. 多人协作
    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
    要查看远程库的信息,用git remote或者用git remote -v显示更详细的信息
    推送分支:把该分支上的所有本地提交推送到远程库,推送时要指定分支这样,Git就会把该分支推送到远程库对应的远程分支上git push origin master
    如要推送其他分支,比如dev
git push origin dev

从远程库clone时,默认情况下,只能看到本地的master分支。如果要在dev分支上开发就必须创建远程的origin的dev分支到本地,使用命令git checkout -b dev origin/dev
现在就可以在dev上继续修改然后把dev分支push到远程


  1. 标签管理
  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
  • 命令git tag可以查看所有标签。
  • 命令git show <tagname> 查看标签的信息

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