Git学习第二天
分支的重要操作,stash的用法,以及版本回退
分支的概念
首先针对commit操作,就会形成一条完整的工作时间线,新的版本会指向旧的版本。
分支的出现会把工作时间线分叉,可以创建多个分支,比如:master分支、dev分支。
值得注意的是:无论在哪个分支,HEAD始终指向当前分支。HEAD文件存放目录在.git文件夹中。
分支的重要操作
1.查看分支
git branch
2.创建分支
git branch newBranch
3.切换到newBranch分支
git checkout newBranch
4.删除分支newBranch
git branch -d newBranch
#不能删除当前所在的分支,得先切换到别的分支
#若被删除的分支有文件改动,可以使用 git branch -D newBranch 强制删除
5.创建new_branch,并切换到该分支
git checkout -b new_branch
6.将修改的new_branch分支文件合并到master
git branch master
git merge new_branch
7.对分支进行改名
git branch -m master master2
#将master改名为master2
8.显示当前分支的最新一条信息
git branch -v
9.以图形化的方式查看提交历史
git log --graph
分支使用的几种场景
1、master分支上创建dev分支,在dev分支做修改后,直接合并到master分支
git checkout -d dev
#在dev分支上进行一系列文件的操作...
git checkout master
git merge dev
git自动合并,使用fast-forward模式。
但是这种模式有个弊端,删除分支时会丢掉分支信息。可以在合并时加上–no-ff参数禁用fast-forword,这样会多出一个commit id,比如:git merge --no-ff dev。不过,这种使用的场景不多,因为没有必要。
2、master分支上创建dev分支,在dev分支做修改后,再在master上做修改,然后合并dev分支
git checkout -d dev
#在dev分支上进行一系列文件的操作...
git checkout master
#在master分支上进行一系列文件的操作...
git merge dev
#文件test.txt冲突,解决冲突
git add test.txt
git commit
3、切换分支,不是切换到某个已命名的分支(如:master、dev),而是切换到某个具体的提交(如:9sa68),修改后提交成为新分支,再切换为master分支。
git checkout 9sa68
#当前HEAD会指向9sa68
#在9sa68上进行一系列文件的操作...
git cimmit -m 'commit 9sa68'
#此处提交会形成一个新的提交,如:81sed5。若不提交,直接切换回master,会报错
git checkout master
git branch newCommit 81sed5
#对81sed5这个提交创建一个分支名,叫newCommit
4、当前在dev1分支上开发,开发了一半,按规范没法提交。又被要求去分支dev2上做一个临时的紧急开发,开发完dev2后,再回来继续开发dev1
git branch dev1
#在dev1上开发
git stash save 'temp save'
#临时保存当前的开发进度。若不保存,直接切换到dev2,会报错
git branch dev2
#在dev2上开发,结束后切换回dev1
git branch dev1
git stash list
#查看在dev1上所有的临时保存
git stash pop
#恢复最近的一次保存,并将该保存删除
git stash apply
#恢复最近的一次保存,但并不删除该保存。若想删除序号为0的保存,git stash drop stash@{0}
git stash apply stash@{1}
#恢复序号为1的保存,但并不删除该保存
#在dev1上继续之前的开发
版本回退
1.回退到上一个版本
git reset --hard HEAD^
git reset --hard HEAD~1
2.回退到前一个版本
git reset --hard HEAD^^
git reset --hard HEAD~2
3.回退到具体某个版本(可以是前面的版本,也可以是后面的版本)
git reset --hard 1aa8ds
#1aa8ds表示具体某个commit_id
4.查看操作日志
git reflog
#git log只能看到前面的提交日志,但是git reflog可以看到前后所有的commit_id