- GIT: git是一种分布式版本控制系统,与之相对应的是CVS和SVN等集中式版本版本控制系统
-
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
创建版本库(window10)
- 新建文件,打开git bash
mkdir learn_git cd leanr_git
- git init 创建一个空的仓库
git init git add file_name git commit -m "一些信息"
回退版本
- 在Git中,用
HEAD
表示当前版本,也就是最新的提交 -
上一个版本就是
HEAD^
,上上一个版本就是HEAD^^,依次类推,往上100个版本就是:
HEAD~100 -
穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。 -
回退到上一个版本:
git reset --hard HEAD^
-
git log 再看的时候已经看不到最近的一次提交了,如果还想再回去,需要找到之前的commit id,然后使用命令:
git reset --hard 00d02dd14e3c918220c811ef25f4268ac7ac7af8
-
Git提供了一个命令
git reflog
用来记录你的每一次命令, 可以找到之前的命令(要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本) -
git reset --hard commit_id, 其中--hard其实就是git版本库的指针,指向哪里,文件就会更新到哪里
-
git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支,git commit -m ""之后,暂存区就没有内容了,全部提交到master上了。 -
命令
git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销 -
用命令
git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区 -
删除文件的时候使用git rm file_name 然后git commit -m "提交信息"
远程仓库
- 申请githug账户
- 在windown系统中配置ssh 秘钥:
cd 到该路径下可以看到秘钥的路径id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人ssh-keygen -t rsa -C "youremail@example.com" cd ~/.ssh pwd
- 在github中新建远程仓库(依次点击右上角的加号,new repository, 输入远端仓库的名称),点击新建
- 将本地仓库和远端仓库关联起来:
git remote add origin https://github.com/qinliuhuan/learn_git_qlh.git git push -u origin master
- 我们第一次推送
master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令
git push origin master
- 往github上提交代码的时候每次都需要输入用户名和密码问题:
在添加远程库的时候使用了https的方式。。所以每次都要用https的方式push到远程库,速度慢 查看使用的传输协议: git remote -v 重新设置成ssh的方式: git remote rm origin git remote add origin git@github.com:username/repository.git git push -u origin master 注意:username就是你github的名称,可以直接从远端仓库上面去拷贝(clone and download,选择使用sshkey就可以)
- 创建新的分支
git checkout -b dev Switched to a new branch 'dev' git checkout命令加上-b参数表示创建并切换,相当于以下两条命令: $ git branch dev $ git checkout dev Switched to branch 'dev' 然后,用git branch命令查看当前分支: $ git branch * dev master 在dev分支上进行开发,然后添加,提交 git add file_name git commit -m "informatio" 再切回到master分支,但是此时之前的修改不见了 我们把dev分支的工作成果合并到master分支上:git merge dev git merge命令用于合并指定分支到当前分支 合并完成之后,直接在master分支提交到远端仓库: git push origin master
-
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用
git log --graph
命令可以看到分支合并图 -
准备合并
dev
分支,请注意--no-ff
参数,表示禁用Fast forward
:
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并$ git merge --no-ff -m "merge with no-ff" dev
-
正在dev开发的过程中,有bug要修改的时候,先将dev分支中的内容git stash保存起来,然后git chekcout master切换到主分支,再新建一个bug分支,修改完bug ,git add , git commit -m 然后切回到master 分支,git checkout master ,然后git merge --no-ff -m "" git push origin master 提交,更新,然后再切换到dev分支,git stash pop 将之前的开发恢复出来,git add git commit ,再回到master分支 git merge --no-ff -m ""再次提交,git push origin master
-
git branch -D <name>
强行删除分支 -
git rebase操作
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比