对分支进行操作
- 查看当前分支:
git status
- 查看某个项目的所有分支:
git branch
- 切换到指定的分支:
git checkout branchName
- 合并某分支到当前分支:
git merge branchName
- 删除某个分支:
git branch -d branchName
- 创建某个分支并切换到该分支上:
git checkout -b branchName
添加文件到git仓库
- 添加修改的文件到本地仓库:
git add filePath
(将文件添加到暂存区, filePath为要添加的文件的路径) - 一次提交添加过的文件:
git commit -m "注释内容"
(将暂存区的所有文件提交到本地仓库的分支上) - 推送代码到远程仓库:
git push
(将代码推送到远程的git仓库的对应的分支上)
特别注意:git有一个暂存区的概念,git add
命令就是将工作区的修改添加到暂存区,最后通过git commit
一次性将暂存区中的文件提交到仓库的分支上。
回退到某个版本
- 查看已经提交的历史,以便查看回退到哪个版本:
git log
- 回滚到历史的某个版本之后,想要再次回到原来的某个版本:
git reflog
- 当提交出现问题,回退到某个版本:
git reset --hard commit_id
对比工作区和分支代码
- 对比工作区项目和分支的区别:
git diff
- 对比工作区项目的某个文件和分支上某个文件的区别:
git diff HEAD --
本地项目的文件路径
对修改文件进行还原
- 工作区的文件修改出错想要还原回修改前的状态:
git checkout -- 本地项目的文件路径
(该文件没有添加到暂存区) - 工作区的文件已经添加到暂存区,这种情况下的还原分为两步:第一步先把暂存区中的修改进行还原,可以使用命令
git reset HEAD -- 项目的文件路径
;第二步再把工作区中的修改进行还原,可以使用命令git checkout -- 本地项目的文件路径
。
对工作区删除的文件进行还原
- 删除工作区的文件:
git rm 本地项目的文件路径
- 如果工作区的文件被误删除,这种情况下的还原分为两步:第一步先把暂存区中的修改进行还原,可以使用命令
git reset HEAD -- 项目的文件路径
;第二步再把工作区中的修改进行还原,可以使用命令git checkout -- 本地项目的文件路径
。
解决冲突
什么情况下会出现冲突呢?两个分支都对同一个文件进行了修改,在进行文件合并时,会遇到冲突的问题。这里会分为两种情况,一种情况是工作区修改的文件没有commit,另一种情况是已经进行了commit。
- 针对第一种情况,可以使用命令:
git stash
,然后再进行merge
,最后解决冲突,提交即可 - 针对第二种情况,直接merge,解决冲突,提交即可。
- 合并分支:
git merge --no-ff -m "注释" branshName
(这里采用强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息) - 在代码合并时,假如要提交到远程仓库的dev分支,首先要将dev的代码合并到自己的分支上,解决完冲突之后,把代码提交到分支上之后。再切换到dev分支上,将自己分支的代码合并到dev上
多分支同时开发
如果我们在dev分支上进行开发,开发了一半。这时需要再创建一个分支,处理其他的bug。这时不能提交开发了一半的代码。此时需要切换到一个新的分支上来进行开发。这时怎么处理这些未开发完的代码呢?将开发了一半的代码先‘冻结’
- 使用
git stash
先‘冻结’代码 - 如果在其他分支上开发完成了,需要重新切回分支再继续开发。首先通过命令
git stash list
来查看,然后通过git stash pop
来恢复‘冻结’’的代码。
推送分支
- 推送代码之前要首先更新一下分支的代码:
git pull
,遇到冲突就处理冲突等。 - 将分支代码推送到远程仓库:
git push origin branchName
- 查看远程仓库的版本信息:git remote -v
写在最后:git的分支的创建时只是创建了一个指针,当前的分支会指向最新的提交,HEAD会指向当前的分支。代码每次提交,当前的分支会向前移动一步。所以我们会看到分支会是一条线,随着不断的提交,这条线会变得越来越长。所以git的创建分支和切换分支时都非常的快,其实只是创建了一个指针,在切换分支时,改变了分支的指向而已。