版本管理Git相关

前言

最近要开始正式进行融入团队开发,对于 Git 的使用一直也不是特别清楚,基本的多人协作也比较模糊。所以照着廖雪峰老师的 Git 教程 系统的学习了一下,内容还是十分清晰有用的。这里做一些简单归纳,具体命令细节可以查看原文。

当然,大多数情况我们可能并不直接使用命令行操作 Git,之前用过一款图形化工具 SourceTree 推荐给大家,当然现在 VsCodeIDEA 也都提供可视化操作,也十分方便。

I. 安装Git

各个平台的下载安装应该较为简单,直接参考官网。

安装完git后,需要进行最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

# 查看是否设置成功
$ git config --list

因为 git 是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

注意 git config 命令的 --global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

具体仓库的设置可以进入具体仓库的 .git 文件夹所在目录下,命令行输入:

$ git config user.name "Your Name"
$ git config user.email "[email protected]"

或者直接修改 .git/config 文件:

[user]
    name = Your Name
    email = [email protected]

II. 相关概念

  • 工作区:代码项目所在根目录下,除 .git 文件夹外
  • 版本库/仓库.git 文件夹就是仓库(以前一直以为仓库是工作区+真正的仓库,这是错误的)
    • 暂存区:stage,工作区的改动经过 add 后就可以加入暂存区
    • 分支:默认会创建出 master 分支

版本管理Git相关_第1张图片

III. 相关操作

创建提交

# 进入项目根目录下,创建仓库
$ git init

# 添加文件到仓库命令:git add 文件相对路径,如果是文件夹那么递归add该文件夹下全部文件
# 例如在项目根目录下创建了doc文件夹,文件夹下创建start.md文件,则:
$ git add doc/start.md

# 查看文件改动
git diff  # 所有文件改动
git diff 具体文件  # 详细展示具体文件改动

# 查看add的文件 
$ git status

# 撤回add文件
$ git reset HEAD # 撤销所有add内容 
$ git reset HEAD XXX/XXX/XXX.java # 对某个文件进行撤销

# 将文件提交到仓库命令:git commit -m "该次提交信息"
$ git commit -m "first commit"

# 查看历史提交记录
$ git log

版本回退

# 版本回退
$ git reset --hard HEAD^ # 上一个版本
$ git reset --hard HEAD^^ # 上上个版本
$ git reset --hard HEAD~10 # 上10个版本

# 回退完了再想回来(需要想退回来的那个版本的commitid)
# 命令格式: git reset --hard commitid前几位即可
$ git reflog   # 记录每一次命令操作,用于查找对应版本的commitid
$ git reset --hard 219c9

撤销修改

# 当想要放弃工作区的某个文件的修改,命令:git checkout -- file
$ git checkout -- doc/start.md
# 上面命令意思是把start.md文件在工作区的修改全部撤销,这里有两种情况:
# 一种是start.md自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
# 一种是start.md已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
# 总之,就是让这个文件回到最近一次git commit或git add时的状态。

# 当想要放弃暂存区的某个修改
$ git reset HEAD file # unstage操作
# 然后就回到上面的状态了——放弃工作区的修改

删除文件

# rm代表要从仓库删除某个文件,然后commit
$ git rm /doc/start.md
$ git commit -m "xxx"

本地与远程仓库

# 本地仓库推送远程
$ git remote add origin [email protected]:xxxx/xxxx.git  # 关联远程仓库
$ git push -u origin master  # 推送本地仓库master分支
# 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

# 远程仓库拉取本地
$ git clone 远程仓库地址

# 拉取远程仓库分支,命令:git checkout -b 分支 远程分支
$ git checkout -b dev orgin/dev

# 拉取远程仓库分支最新提交
$ git pull

# 查看远程仓库信息
$ git remote
$ git remote -v

分支管理

# 从当前分支创建新分支并切换,命令:git checkout -b 分支
$ git checkout -b dev
# -b参数表示创建并切换,相当于 git branch dev 加上 git checkout dev

# 查看当前所在分支
$ git branch

# 在新分支上操作完,切回某一分支,命令:git checkout 分支名
$ git checkout master
# 切换回master会发现dev分支的操作没有了

# 目标分支合并到当前分支,命令:git merge 目标分支
$ git merge dev  # 合并dev分支到当前master分支

# 删除某一分支,命令:git branch -d 分支
$ git branch -d dev  # 合并完后的分支可以删除
$ git branch -D dev  # 强制删除

解决冲突

# 当需要合并的两个分支有冲突时,原理就是再继续修改,时间线向前推进焦点
$ git merge feature1   # 当合并feature1到master,出现冲突
# 改完冲突,便可以add/commit了
$ git add doc/start.md
$ git commit -m "conflict fixed"

# 查看分支合并图
$ git log --graph

# 合并分支禁用Fast forward模式,Fast forward模式合并后删除分支会丢失分支信息,
# 看起来就是一条线,没有合并相交
# 命令:git merge --no-ff -m "comment" 分支
$ git merge --no-ff -m "your merge comment" dev

保存现场

# 场景示例:https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
# 可以利用stash保存工作区现场,暂时清空工作区,最后进行恢复
$ git stash

# 恢复现场
$ git stash apply  # 恢复后,stash内容并不删除,需要用git stash drop来删除
$ git stash pop    # 恢复的同时把stash内容也删了

# 查看所有的stash
$ git stash list

标签管理

# git tag 就可以打一个新标签
$ git tag v1.0  # 对当前最新commitid打标签
$ git tag -a v1.0 -m "tag comment"  # 当前标签的comment
$ git tag v0.9 f52c633  # 对指定的commitid进行打标签

# 查看所有标签
$ git tag

# 查看某一标签信息
$ git show v0.9

# 删除本地某一标签
$ git tag -d tagname

# 推送本地标签到远程
$ git push origin tagname
$ git push origin --tags  # 一次性推送全部尚未推送到远程的本地标签

# 删除远程标签
$ git tag -d tagname  # 先删除本地
$ git push origin :refs/tags/tagname  # 再删除远程仓库

IV. IDEA可视化操作

  • 这里贴一个文档:IDEA之Git分支以及Stash使用

你可能感兴趣的:(开发工具)