git简书 (更新中)

一.git版本回退问题
git命令:
git log –pretty=oneline 显示提交日志,完整版本号
git reflog 查看命令历史
git reset –hard HEAD^ 回到上一版本
git reset –hard HEAD~x 回到之前x个版本
git reset –hard cb926e7e 回到某一个版本

git可以想象成一个多叉树,版本的回退只是指针的移动,比如当前版本B,上个版本A,现在回退到上个版本A,接着出现了提交,于是在A版本出现了分支(C版本)
显然git的回退是很快,而且可以回退到未来版本(相当于上面例子中从A版本回到B版本)

二.git版本库的管理

A.管理修改
git diff HEAD — 文件名,这个命令可用来查看xx文件在当前工作区和版本库之间的不同

B.撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout — file
命令git checkout — file意思就是,把file文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

注:git checkout — file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作
git reset HEAD 文件名,可以把暂存区的修改撤销掉(unstage),重新放回工作区

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,请参照《一.git版本回退问题》,不过前提是没有推送到远程库

C.删除文件
git rm file,可以直接删除file文件,工作区和stage都会被修改
但是如果文件不小心删错,没关系,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:git checkout — file

注:git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
二.git分支管理
A.创建于合并分支

查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>

B.解决冲突

git merge x:将指定x分支合并到当前分支,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容。

小提示:git log –graph命令可以看到分支合并图
C.分支管理策略
D.Bug分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再恢复:
恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
git stash apply 和 git stash drop x,可以指定删除名字为x的stash
E.Feature分支
F.多人协作
要查看远程库的信息,用git remote,用git remote -v显示更详细的信息

A.新增分支
如果远程创建了一个新的分支用于开发新功能,本地想要同步分支情况,那么我们可以这样做:
先git pull把远程的最新信息合并下,会出现:
* [new branch] dev -> origin/dev
Already up-to-date.
那么接下来执行:git checkout -b dev origin/dev
接着git branch查看本地分支情况,发现已经同步了dev的分支

B.删除分支
如果新功能开发完了,将dev分支合并到master上,这是需要删除分支dev:
git push origin –delete dev 删除远程分支
git branch -d dev 删除本地分支 (如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除)

C.修改分支
本地分支重命名
git branch -m oldbranchname newbranchname

多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。

LEAVE A COMMENT