创建git仓库
$ git config –global user.name”Weldon”
$ git config –global user.email”wxh199311@outlook.com”
$ git config –global user.name “Your Name”
$ git config –global user.email “email@example.com”
git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
提交文件到仓库
- 1.创建一个版本的仓库 $ git init
- 2.写入文件 提交到仓库 $ git add
(添加到暂存区)
*3.提交到版本库 $ git commit -m “提交的描述,做了哪些操作” (把暂存区的文件提交到master分支),这个分支是git自己创建的
版本回退
$ git log 查看提交日志
4ae77e214854da0e35b34043663e82737bd6e1ad 第三次修改了内容 前面是提交的ID
$ git log –pretty=oneline 美化输出信息
- $ git reset –hard HEAD^ 回退到上一个版本 ^上一个版本
- $ git reset –hard 4ae7 回退到提交的id是4ae7的文件状态
- $ git reflog 记录了每一次的命令
工作区和暂存区
- Untracked表示创建了但是没有提交到暂存区的文件的状态 文件从来没有被添加过
- 每次修改,如果不add到暂存区,那就不会加入到commit中。
- git diff HEAD –文件名 命令可以查看工作区和版本库里面最新版本的区别:
撤销修改
- 没有提交到暂存区时 用git checkout – file (git checkout .)就可以撤销对工作区的修改
git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令
提交到暂存区修改时,可以回到提交到暂存区时的状态 - 提交到暂存区 但是没有到仓库 git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
- 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
- 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件
- git rm 删除文件,想要找回删除的文件 可以使用git checkout – file
- git rm file 删除版本库文件,删除之后不能找回
提交文档到github远程仓库
- 1.$ ssh-keygen -t rsa -C “youremail@example.com” 获取电脑的SSH key 把id_rsa.pub中的内容提交到github的sshkey里面
- 2.在github新建一个项目,本地执行$ git remote add origin git@github.com:name/file.git 和远程仓库进行绑定
- 3.本地执行$ git push -u origin master 把本地当前的分支推送到远程仓库 即github上面
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
- 4.从现在起,只要本地作了提交,就可以通过命令:$ git push origin master提交到远程仓库
远程仓库克隆
- 1.$ git clone git@github.com:name/filesrc.git 本地执行命令可以克隆代码
- 提交操作和上面相同,默认就把本地仓库绑定了github的远程仓库
创建合并分支
1.我们创建dev分支,然后切换到dev分支:
12$ git checkout -b devSwitched to a new branch 'dev'2.git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
123$ git branch dev$ git checkout devSwitched to branch 'dev'3.git branch命令会列出所有分支,当前分支前面会标一个*号。
123$ git branch* devmaster4.改变文件之后提交,就会提交到dev分支进行提交,并且在master分支上没有任何改变
1234$ git add readme.txt$ git commit -m "branch test"[dev fec145a] branch test1 file changed, 1 insertion(+)5.改变分支到master,会发现没有任何改变
12$ git checkout masterSwitched to branch 'master'6.现在,我们把dev分支的工作成果合并到master分支上:
git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。
12345$ git merge devUpdating d17efd8..fec145aFast-forwardreadme.txt | 1 +1 file changed, 1 insertion(+)7.合并完成之后就可以删除分支
12$ git branch -d devDeleted branch dev (was fec145a).
解决分支冲突
- 1.如果创建的两条分支上都有内容提交的话,合并的时候必须手动处理冲突才能进行合并,具体的冲突文件会在文件中标出
- 2.合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
- 3.准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward:
$ git merge –no-ff -m “merge with no-ff” dev
bug分支
- 1.Git还提供了一个stash功能,可以把工作现场暂时存储起来,等修复完bug之后继续工作
- 2.首先把当前为保存的文件先寄存起来,修复完bug再继续工作
git stash
- 3.新建一条分支并跳转到这条分支
git checkout -b issue-101
4.修改完之后执行
git add .
git commit -m “进行了修改”
5.回到主分支并把bug分支合并到主分支
$ git checkout master //切换到主分支
$ git branch -d issue-101 //把bug分支合并到主分支
6.回到工作分支进行操作
12345$ git checkout devSwitched to branch 'dev'$ git status# On branch devnothing to commit (working directory clean)会发现工作分支并没有任何需要操作的文件,我们需要执行命令查看我们寄存的工作文件
12$ git stash liststash@{0}: WIP on dev: 6224937 add merge我们发现我们的工作现场还在,只是git帮我们存储到了一个地方,我们恢复的时候有两种方法
- 第一种方法
git stash apply
恢复后stash文件没有被删除,需要执行git stash drop
来删除 - 第二种方法
git stash pop
恢复的同时也会把stash文件删除掉
- 第一种方法
- 7.最后我们执行git stash list会发现看不到stash的任何内容
- pwd: 显示当前路由位置
- git add
:文件添加到仓库(git add .) - git commit:-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录
- git status :查看仓库当前的状态(是否有变动的文件)
- git diff:查看修改了哪些内容(只能查看未提交的内容)
- git log: 查看提交的操作的日志
- git log –pretty=oneline 美化输出信息
- git reset –hard HEAD^ 回退到某一个个版本
- git reflog 记录了每一次的命令
- git checkout – file (git checkout .)就可以撤销对工作区的修改
- git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:
- 查看分支:git branch
- 创建分支:git branch
- 切换分支:git checkout
- 创建+切换分支:git checkout -b
- 合并某分支到当前分支:git merge
- 删除分支:git branch -d