初始化git仓库
- git init (通过这个命令 把此目录变成git可以管理的仓库)
- 如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
把一个文件放到Git仓库只需要两步
- git add . (提交到暂存区)
- git commit - m "一些注释"
时光穿梭机
版本回退
- git log 多次提交之后 查看提交记录
- git reset --hard commit_id (提交记录时间点的唯一标识)
你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
- git reflog (查看所有历史提交记录)
- 再次 git reset --hard commit_id (提交记录时间点的唯一标识)
现在总结一下:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
工作区和暂存区
- 工作区 项目文件夹下能看到的目录
- 暂存区 git add 值之后执行的代码 放到了暂存区 (由 .git 文件夹开始管理)
- git commit 把当前暂存区里的代码一次性操作放到当前分支 本地仓库
查看差异
- git diff 查看工作区与版本库里的最新区别
- git diff HEAD -- readme.txt 产看某个文件的区别
git 是追踪更改而不是追踪文件
Git是跟踪修改的,每次修改,如果不用git add到暂存区,那就不会加入到commit中。
撤销修改
场景:不小心将代码 git add 到暂存区 想要撤销暂存区内的更改
- git restore --staged 文件名
- 例子: git checkout -- readme.txt
注意 -- 是必须的 要不然就是切换分支操作了
远程仓库
添加远程仓库
- 在github 上新建仓库
- 在本地上与之关联
3. git remote add origin git@github.com:michaelliao/learngit.git
- 添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
5. 首次推送 git push -u origin master
- 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令:
- git push origin master
待解决 git push origin master 与 git push 有区别吗
删除远程库
- git remote rm 远程仓库名
- 建议先用git remote -v查看远程库信息
$ git remote -v
origin git@github.com:michaelliao/learn-git.git (fetch)
origin git@github.com:michaelliao/learn-git.git (push)
- 然后根据名字删除 git remote rm origin
此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。
从远程仓库克隆
1.git clone 远程仓库地址
创建分支与分支合并
- git checkout -b 分支名 (切换并创建分支)
- git merge 分支名 (合并分支)
- git branch -d 分支名 (删除分支)
标签管理
创建标签
git tag 标签名
例子: git tag v1.0 (打在最近的提交id上面)
git tag 标签名 提交id (补漏标签)
例子: git tag v0.9 f52c633
创建带有说明的标签
- git tag -a 标签名 -m "描述信息" 提交id
- git tag -a v0.1 -m "version 0.1 released" 1094adb
查看标签
- git tag (查看所有)
- git show 标签名 git show v0.1 (查看某个标签)
操作标签
- 如果标签打错了 也可以删除 --------git tag -d v0.1
- 因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
- 如果要推送某个标签到远程,使用命令git push origin 标签名------git push origin v1.0
- 一次性推送全部尚未推送到远程的本地标签-------git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点
- 先从本地删除-------git tag -d 标签名
- 然后,从远程删除。删除命令也是push,但是格式如下---git push origin :refs/tags/v0.9
- git push origin :refs/tags/标签名