git学习笔记
@(python)
git 命令 | 这是git常用命令 |
---|---|
init | 建立git仓库 |
add | 把文件添加到仓库 |
commit | 把文件提交到仓库,将暂存区中的文件提交到master中 |
status | 掌握仓库的状态,看到更改的,有没有提交 |
diff | =differents变化 |
log | 查看历史记录,谁,什么时候,改了什么 |
reset | 回退 |
reflog | 记录每一个命令 |
checkout – file | 用版本库里的版本替换工作区的内容;-b 创建分支,并切换到分支 |
rm | 删除 |
branch | 查看当前分支 -d删除分支 |
merger | 分支合并到当前分支分支上 |
stash | 存储工作现场 |
stash list | 工作现场列表 |
tag | 打标签 |
远程库 |
|
clone | 克隆远程库 |
git remote -v | 查看远程库的信息 -v详细信息 |
git push origin master | 推送某个分支 |
状态 | |
---|---|
Untracked | 未添加过 |
Changes not staged for commit: | 添加过,但是更改没有add |
no tracking information | 本地分支和远程分支的链接没有创建 |
添加文件方法
git add 【files】 //把文件添加到暂存区中
git commit -m “description” //将暂存区中的所有内容提交到当前分支
版本回退
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,往上一百个版本写成HEAD~100
eg
退回上一个版本
$ git reset –hard HEAD^ //或者写commit id
HEAD is now at ea34578 add distributed
再次查看log,发现最后一次的更新已经没有了,那么如何更新回这一个版本呢,往上翻,找到上一次的版本号
$ git reset –hard 3628164
HEAD is now at 3628164 append GPL
也可以这样
git reflog //会显示所有的历史操作
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向了另一个版本。
git工作原理
工作区就是真实电脑中的路径。版本库中包括,暂存区和master
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
如何去除不想add的文件
先把大量文件一次性add进来:
strong textgit add *.py
然后你用git status查看,会有提示:
Changes to be committed:
(use “git reset HEAD …” to unstage)
new file: 1.py
new file: 2.py
new file: 3.py
new file: 4.py
要排除掉其中一个文件,用:
git reset HEAD 1.py
这时再用git status看,1.py变成了untracked,剩下的就可以提交了。
撤销修改
撤销工作区中的更改
git checkout –file
如果修改前提交到暂存区,那么工作区的文件会恢复为暂存区中的版本,否则恢复到版本库中的版本。
撤销提交到暂存区的修改
git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区
提交到版本库中回退
如果没有提交到远程库可以参见版本回退,用reset回退版本
远程仓库
链接远程仓库
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C “youremail@example.com”
cd ~
ls -a
找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
1.按照git上的提示将本地库关联到远程
2.关联后,使用命令git push -u origin master第一次推送 master分支的所有内容;
3.此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
拉取远程仓库
git fetch [remote-name]
此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。
克隆远程仓库
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
分支
分支是git十分重要的功能,当你在开发新功能(feature)时,最好新建一个分支。
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
在多人协作时,分支也是十分有用的,master版本是稳定版本,如果因为一点一点的添加,会照成使用错误,所以,真正的开发可以建立到一个dev分支上,时机成熟了,再将更新推送到master上。
创建分支
创建一个Dev分支
git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev //切换分支
Switched to branch ‘dev’
查看、合并、删除分支
git branch 查看当前分支
git merge dev
将当前分支合并到当前分支
git merge –no-ff -m “merge with no-ff” dev
添加了一个–no-of可以将分支中的提交历史也合并到另一个分支上
>***git branch -d dev*** 删除分支
- 1
解决合并冲突
当两个分支同时编辑一个文件时,就会出现冲突,<<<<<<<,=======,>>>>>>>标记出不同分支的内容手动改源文件,改好后提交。
保存工作状态
>git stash
- 1
处理完其他事情后,找到当时的工作状态
> git stash list //查看保存的工作状态
- 1
恢复工作状态
>git stash apply //恢复工作区
>git stash drop //删除工作区
- 1
- 2
等同于上面的两个
>git stash pop
- 1
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
>$ git stash apply stash@{0}
- 1
多人协作
没太看懂,先占个坑。
廖雪峰git教程-多人协作
推送本地分支到远程库
git push origin master
并不是所有的本地分支都要推送到远程的
一般在多人协作中,有两个分支,一个master主分支、dev开发分支,开发人员要在开发分支上同步开发进度
查看远程库的信息
>git remote // -v 详细信息
- 1
在本地创建远程分支
git checkout -b dev origin/dev
- 1
标签管理
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。
打一个标签
git tag v1.0
也可以用git tag
查看所有标签
给历史提交一个tag
用git log --pretty=oneline --abbrev-commit
找到历史提交的commit id 然后打上就可以了
git tag v0.9 6224937 //commit id
tag information
git show <tagname>
delete tag
git tag -d v0.1 //local
删除远程tag
先删除本地的tag
让后从远程删除
$ git push origin :refs/tags/v0.9
推送tag到远程
git push origin <tagname> //only
git push origin --tags //push all local tag
Fork
如何参与一个开源项目呢?比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目主页https://github.com/twbs/bootstrap,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone
git clone git@github.com:michaelliao/bootstrap.git
一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址git@github.com:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。
配置别名
用st代替dtatus
廖雪峰—配置别名
$ git config --global alias.st status