Git相关指令



基本命令
git add fileName         把文件提交到暂存区
git commmit -m "info"    把所有暂存区文件提交到版本库的分支
git reset --hard HEAD^   版本会退到上一个版本(HEAD表示当前版本分支)
git reset --hard commit id  版本回退到任意一个历史版本
git reflog  查看历史命令记录
git checkout -- fileName  撤销工作区的修改(对于没有提交到暂存区的),或者撤销现在的修改保持和暂存区内相同(已经提交到暂存区add,工作区又做了修改),即回到最近的git commit或者git add
git reset HEAD fileName   插销已经add到暂存区的修改,把修改放回到工作区,在利用上面一个命令就可以撤销工作区的修改
git rm fileName  删除版本库的文件+git commit
rm fileName      直接删除工作区的文件
git checkout -- fileName 删除工作区的文件后恢复(从版本库中恢复,同上面的撤回修改一个原理,不论是修改还是删除都可以根据版本库的内容删除)






git init   初始化版本库
git log [--pretty=oneline]  查看日志
git status 查看工作区所有文件的状态
git diff HEAD --fileName 查看工作区和版本库文件有何不同




工作区和暂存区,本地仓库和远程仓库
.git文件夹
stage暂存区
第一个分支:master
HEAD指针,指向master

repositiry -工作区


在github上面创建远程仓库,地址如下:


https://github.com/Lyzxii/myRepository.git
[email protected]:Lyzxii/myRepository.git




git remote add origin https://github.com/Lyzxii/myRepository.git
git remote add origin [email protected]:Lyzxii/myRepository.git   在本地库上关联远程库


远程库的名字就是origin


把本地库推送到远程库:
git push -u origin master  由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
git push origin master   以后推送的时候可以使用这样的方式


git clone [email protected]:Lyzxii/pingAnFangRespository.git  在远程库克隆一个本地库:




分支


在Git中,每次提交,Git都把他们穿成一条时间线。这条时间线就是一个分支,目前为止,只有一条时间线,该分支叫做主分支,即master分支
HEAD指向master,master指向最新的提交
每次提交,master分支都会向前移动一步,随着不断的提交,master分支越来越长


创建/切换分支
git checkout -b dev = git branch dev 创建分支+git checkout dev 切换分支(-b 表示创建并切换分支)


创建新的分支dev的时候,会创建新的指针dev,和master一样指向相同的提交,再把HEAD指向dev,就表示当前分支在dev上
即创建dev分支的是 增加一个dev指针,更改HEAD的指向,工作区文件不发生任何变化
再次提交的时候,dev分支指向向前移动,master分支不变


git branch 列出所有的分支,当前分支前带有*


合并分支1
git merge dev :把dev分支合并当前分支上,合并的方式:Fast-forward,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

dev合并到master,即直接把master指向dev的当前提交,git合并分支就是改改指针的位置。工作区内容也不会发生变化
合并完成后可以删除dev分支了

有些提交时通过分支来完成的。在dev上的提交文件,切换到master分支后是看不到的

删除分支

git branch -d dev 删除dev分支



合并分支2

创建分支dev,对A文件进行修改,提交,切换到master分支,也对A文件进行修改,提交

此时A文件就存在冲突了,可以打开A文件开到冲突部分,而且这个冲突无法通过快进模式进行合并


解决方式:手动修改A文件,再次提交,使得master分支和dev分支都在进行一次提交,最后可以选择删除dev

总结:当无法自动合并分支的时候,就必须手动解决冲突,把Git合并失败的文件手动编辑为我们希望的内容,再提交

使用命令git log -graph 命令查看分支合并图



分支管理策略:

合并分支的时候使用git merge dev ,如果可能,默认使用的是fast -forward模式。这种模式,删除分支后分支信息会丢失


使用 git merge --on--ff -m "xx" dev  表示:禁用fast-forward,合并的时候创建一个新的commit,所以加上-m参数,把commit描述写进去。

在开发中我们都是在dev分支上开发,而不会在master分支上开发

bug分支


需要修改bug,需要临时关闭正在操作的分支dev,可以先把dev的所有修改先保存起来,然后去创建bug的分支bugdev,修改完成之后,合并到master之后,在回到dev分支,找回储存的工作内容


git stash 执行dev分支内容的存储

git checkout master 切换到master分支

git checkout -b bugdev :在master分支上创建并且切换到修复bug的分支

修复bug(add,commit)

git checkout master 切换到master分支

git merge --on--ff -m "fixed bug" bugdev  在master分支上合并bug分支(bug分支合并到当前分支master)

git branch -d bugdev 删除bugdev分支

git checkout dev 切换到dev分支

找回之前dev工作的备份

dev stash apply  找回dev工作备份,但是需要手动删除stash中备份:git stash drop

dev stash pop 找回dev工作备份并且删除stash中数据(相当于上面2部分)


可以通过git stash list 查看备份区中的数据


测试分支

为了某个功能的实现,我们不再正在开发的主干分支上进行,而是新建一个测试分支,在测试分支上进行测试,完成后提交合并到开发的主干分支上面

但是如果此时没有提交,合并我们就不需要这个测试分支了呢?那就删除

删除没有合并的分支需要强制删除 -D

git branch -D feature (-d是删除已经合并了的分支,-D是强制删除未合并的分支)



测试分支


为了某个功能的实现,我们不再正在开发的主干分支上进行,而是新建一个测试分支,在测试分支上进行测试,完成后提交合并到开发的主干分支上面


但是如果此时没有提交,合并我们就不需要这个测试分支了呢?那就删除


删除没有合并的分支需要强制删除 -D


git branch -D feature (-d是删除已经合并了的分支,-D是强制删除未合并的分支)




多人协作


工作模式通常是这样:


首先,可以试图用git push origin <branch-name>推送自己的修改;


如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;


如果合并有冲突,则解决冲突,并在本地提交;


没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!


如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。


这就是多人协作的工作模式,一旦熟悉了,就非常简单。










标签的使用:


首先切换到使用标签的分支,标签默认打在最新提交的commit上的


git tag t1.0  打标签在本地库
git tag 查看所有标签
git tag t1.1 commit id 给指定的提交打标签
git show t1.0 查看标签明细
git tag -a t1.2 -m "description"


git tag -d t1.0 删除标签
git push origin :ref/tag/v1.0 先删除本地库标签,在删除远程库标签


git push origin t1.1 推送标签到远程
git push origin --tags 推送所有尚未推送到远程的本地标签




 注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。 







猜你喜欢

转载自blog.csdn.net/weixin_37598682/article/details/80805436