基础操作
创建版本库(repository)
1.选择一个合适的地方,创建一个新目录
mkdir learngit
cd learngit
2.通过git init
命令把这个目录变成Git可以管理的仓库
git init
Initialized empty Git repository in /home/username/learngit/.git/
3.用命令git add
,把文件添加到暂存区:
git add readme.txt
4.用命令git commit
,把暂存区的所有内容提交到当前分支(master):
git commit -m "本次提交说明"
版本回退
1.修改readme.txt文件,git status
查看状态
2.git diff readme.txt
查看修改后的文件与原文件的差异
3.添加并提交到仓库
git add readme.txt
git commit -m "修改说明"
3.显示提交日志git log
,加上--pretty=oneline
输出简洁信息
git log
# or
# git log --pretty=oneline
回退到上一版本
Git中使用 HEAD 表示当前版本(即最新的提交),上一版本为HEAD**,上上版本为**HEAD^,…,如果往上有100个版本,HEAD~100
git reset --hard HEAD^
此时,git log查看,最新的那个版本已经看不到了,想要恢复,可以利用 git reflog
找到commit id:
git reset --hard 52b5642 # id
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git仅仅是把 HEAD 重指向上一版本:
工作区和暂存区
-
工作区(Working Directory)
就是电脑中能看到的目录,如前面的learngit文件夹就是一个工作区。
-
版本库(Repository)
工作区有一个隐藏的目录
.git
,这个不算工作区,而是Git的版本库。版本库中最重要的就是称为
stage/index
的暂存区,还有Git为我们自动创建的第一个分支仓库master
,以及指向master
的一个指针叫HEAD
。
以下笔记内容来自评论区@九只蜗牛Leo
工作区>>>>暂存区>>>>仓库
-
git add
把文件从工作区>>>>暂存区,git commit
把文件从暂存区>>>>仓库, -
git diff
查看工作区和暂存区差异, -
git diff --cached
查看暂存区和仓库差异, -
git diff HEAD
查看工作区和仓库的差异, -
git add
的反向命令git checkout
,撤销工作区修改,即把暂存区最新版本转移到工作区, -
git commit
的反向命令git reset HEAD
,就是把仓库最新版本转移到暂存区
-
撤销修改
回退在工作区修改了文件,但未add到暂存区的文件:
git restore <file>
# 等价
git checkout -- <file>
回退已经add到暂存区,还未进行commit的文件:
git restore --staged <file>
# 等价
git reset HEAD <file>
删除文件
git rm <file>
git commit -m "remove file"
远程仓库
添加远程仓库
-
在Github上 ,Create a new repo,仓库名:learngit,其他默认。
-
根据GitHub提示,在本地learngit仓库下执行:
git remote add origin git@github.com:jwcen/learngit.git # jwcen替换为你自己的用户名
-
把本地库的所有内容推送到远程库:
当前分支
master
推送到远程 origin,远程库为 origin(默认名)。git push -u origin master # 由于远程库是空的,首次推送加-u # git push origin master 以后只要本地做了提交,就直接push
Git把本地的
master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来。注意:
执行推送命令后如果要你输入账号和密码:
账号:GitHub用户名
密码:
-
需要在【settings】中找到【developer settings】-> 【Personal access tokens】-> 【Generate new token】
2. 然后复制生成的token
解决 git push 后每次都要输入账号密码:
git config credential.helper store # 只对当前仓库生效(推荐) git config -- global credential.helper store # 全局
-
删除远程库
-
建议先查看远程库信息
git remote -v
-
根据名字删除,比如删除 origin
git remote rm origin
此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。
从远程库克隆
git clone git@github.com:jwcen/gitskills.git
如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。
Git支持多种协议,默认的
git://
使用ssh,也可使用https
等其他协议。使用
https
除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh
协议而只能用https
。