廖雪峰git教程总结
git base 命令
新建文件夹learngit
$ mkdir learngit
打开新建文件夹learngit
$ cd learngit
显示当前目录
$ pwd
全局配置
$ git config --global user.name “Your Name”
$ git config --global user.email “email@example.com”
配置别名
$git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
既然是一个unstage操作,就可以配置一个unstage别名:
$ git config --global alias.unstage ‘reset HEAD’
$ git unstage test.py 实际上Git执行的是:
$ git reset HEAD test.py
配置一个git last,让其显示最后一次提交信息:
$ git config --global alias.last ‘log -1’
统领的命令有:
初始化一个Git仓库,当前目录下多了一个.git的目录,如果没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
$ git init
查看 git 文件跟踪状态,会告诉工作区(红色)和暂存区(绿色)的情况
$ git status
查看修改的具体内容 被修改(红色)和修改为(绿色)
$ git diff
查看工作区和版本库里面最新版本的区别
用git diff HEAD – filename
查看目前分支的commited时刻记录–时间线
$ git log --pretty=oneline
查看目前分支的所有commited时刻记录,记录你的每一次命令
$ git reflog
某分支的回退某个commited时刻
回退到上一commited时刻
$ git reset --hard HEAD~1回退到commit_id对应的commited时刻
git reset --hard commit_id
工作区和暂存区
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把 文件修改 添加到 暂存区;
第二步是用git commit提交更改,实际上就是把 暂存区的所有内容 提交到 当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性 提交暂存区的所有修改。
丢弃工作区的修改:
$ git checkout – filename
注意:命令中的 –很重要,没有–,就变成了“切换到另一个分支”的命令。git checkout其实是用版本库里的版本替换作区的版本,无论工作区是修改还是删除,都可以“ 一键还原 ”
把 暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD filename
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
删除文件:
$ git rm filename
git 操作各个区交互的命令 |
---|
干净的工作区 working directory |
增(mkdir、)删(rm)改文件 《——》 git restore filename |
工作区 暗红标识 Changes not staged for commit: |
git add filename 《——》 git restore --stage filename |
暂存区 绿色标识 Changes to be committed: |
git commit -m “描述当前快照” 《——》 git reset --hard HEAD~1 |
当前分支 |
git reflog(查看所有历史操作列表)或git log --pretty=oneline(查看当前版本列表) && git reset --hard (commit_id(7位)某个或者HEAD~n)上n次的版本 |
当前分支其他版本 |
git checkout -b branchname && git checkout branchname && git merge --no-ff -m “描述文字” branchname && git checkout -d branchname |
某分支 |
git tag && git tag -a vxx.xxx.xx -m “version 0.1 released” commit_id 《——》 git tag -d v0.1 |
创建tag,标签也是版本库的一个快照 |
git push origin v1.0 && git push origin --tags 《——》 git push origin :refs/tags/v0.9 |
远程分支 |
git pull origin origin/branchname 《——》 git push origin origin/branchname |
当前分支 |
git merge --no-ff -m “描述文字” branchname加上–no-ff参数就可以用普通模式合并,合并后有合并操作记录,而fast forward模式没有记录并。 |
其他分支 |
git stash&&然后去建分支修复BUG《——》修复BUG后,切回拥有stash 的分支,操作 git stash list && git stash apply stash@{0} 恢复,git stash pop 删除对应恢复的储存 |
stash功能 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HvPuiI11-1646987846124)(./git.png)]
我们根据GitHub的提示,在本地的learngit仓库下运行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git
$ git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令–$ git push origin master
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
$ git remote -v显示更详细的信息:
推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
$ git checkout -b dev origin/dev
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。
$ git log --graph --pretty=oneline --abbrev-commit