What:开源的分布式版本管理系统。 Why:相较于 svn,有以下主要优势:
git version #查看 git 版本
yum remove git #如有旧版本先卸载
#安装其他源
yum install -y http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
yum install -y git #安装新版本 git
通过 git 信息流,可以了解 git 的主要流程及操作命令。 主要概念:
#克隆远程仓库
git clone git@github.com:userid/reponame.git
#查看远程仓库
git remote -v
#查看所有分支
git branch -a
#切换分支
git checkout feature/v1.0
#添加所有变更文件到暂存区
git add .
#提交暂存区到仓库
git commit -m "commit message"
#拉取最新代码,自动合并到本地当前分支
git pull
#拉取最新代码,不合并
git fetch
#合并 master 分支到当前分支
git merge master
#推送代码到远程仓库
git push
#查看仓库状态
git status
#列出当前配置
git config --list
#列出当前仓库配置
git config --local --list
#列出全局配置
git config --global --list
#配置用户名
git config --global user.name "your name"
#配置邮箱
git config --global user.email "your email"
git init 用于初始化一个本地仓库,初始化完成后会生成一个 .git 隐藏目录,包含所有元数据。
#在当前目录初始化仓库
git init
#在test_dir目录下初始化仓库
git init test_dir
git clone 用于克隆一个仓库,克隆完成后会生成一个与远程仓库同名的目录,包含所有元数据。 克隆时支持 ssh、git、https 协议。 使用 https 协议时需要账号密码登录。 使用 ssh 协议时可以使用公钥认证,方法是:使用 ssh-keygen在本地生成密钥对,然后在~/.ssh目录下将pub后缀的公钥复制到远程仓库配置中。
#使用ssh协议地址
git clone git@github.com:userid/reponame.git
#使用https协议地址
git clone https://github.com/userid/reponame.git
#使用git协议地址
git clone git://github.com/userid/reponame.git
git 相比 svn 增加了暂存区,文件变更在提交前需要先添加到暂存区。 另外,如果上一次提交未 push,则允许修改上一次提交。
#添加变更文件到暂存区
git add file1 file2
#添加所有变更文件到暂存区
git add .
#提交暂存区到仓库
git commit -m "commit message"
#自动添加所有变更文件到暂存区,然后提交到仓库
git commit -am "commit message"
#修改上次提交,修改提交信息
git commit --amend -m "commit message"
#自动添加所有变更文件到暂存区,然后提交到仓库,修改上次提交,修改提交信息
git commit --amend -am "commit message"
git status 用于查看当前仓库状态,包括变更文件、暂存区文件、未跟踪文件、忽略文件。可以增加参数 -s 缩略显示。绿色表示暂存区变更,红色表示工作区变更。 符号说明:
git fetch 是安全拉取代码的命令,仅拉取最新代码,不会合并到当前分支,不会修改到工作目录的文件。fetch 之后远程跟踪分支 origin/<branch_name> 会更新到最新。 git pull 是拉取代码且合并到当前分支的命令,会自动合并代码,会修改到工作目录的文件。pull 相当于先 fetch 再 merge 远程跟踪分支到当前分支。
#假设当前的分支是 feature_v1.0
git pull
#等同于
git fetch
git merge FETCH_HEAD
#等同于
git fetch
git merge origin/feature_v1.0
git push 是推送本地仓库代码到远程仓库的命令。省略分支名可以将当前分支推送到远程的对应分支。 push 执行时会自动检查远程分支的最新提交点,如果有新提交则会 push 失败。此时需要先 pull 合并远程变更后再 push。 push 执行后 origin/<branch_name>(远程跟踪分支)会更新到最新。
git 仓库的分支包括本地分支和远程跟踪分支。远程跟踪分支是对远程仓库分支的引用,在 fetch 时更新为最新。 远程跟踪分支名称为 origin/<branch_name>。 本地分支与远程跟踪分支存在关联关系,在首次 checkout 创建本地分支时自动建立关联。
#查看本地分支
git branch
#查看远程跟踪分支
git branch -r
#查看所有分支
git branch -a
#查看本地分支与远程跟踪分支的关联关系
git branch -vv
#切换本地分支,如不存在会根据远程跟踪分支创建
git checkout feature_v1.0
#切换到远程跟踪分支
git checkout origin/feature_v1.0
#创建本地分支
git branch feature_v1.1
#删除本地分支
git branch -d feature_v1.1
#清理本地不存在的远程追踪分支
git remote prune origin
git merge <branch_name> 用于分支合并,merge 后是对方分支名称。 git merge --abort 在合并冲突时使用,会抛弃合并过程并尝试重建合并前的状态。如果合并前未 commit 的文件,该命令并不能保证完全还原。一般建议合并前先 commit,或者用 stash 命令将未 commit 的文件暂存起来,合并完成后再 stash pop 出来。 git merge --no-commit 在合并冲突时使用,会合并冲突文件,但不会自动 commit。便于在提交前人工检查。 git merge --ff-only 除非当前可以使用 fast-forward 合并,否则会失败。 git merge --squash 用于压缩提交记录,从共同祖先节点到对方分支的顶点都会压缩在一起,产生一个新的节点。 git rebase 用于重设基底,合并对方分支的最新提交,并将最新提交作为当前分支的基底。 git cherry-pick <commitid> 用于合并某一个提交。
分支冲突的表示:<<<<<<< 当前更改 ======= 传入的更改 >>>>>>> 分支冲突的解决:选择采用当前更改,或选择传入的更改,或选择保留双方更改,或人工修改。
还原是将暂存区或工作区的文件还原为版本库的内容,不会修改到提交历史。 回退将当前分支回退到指定节点,会修改提交历史,是提交的逆向操作。回退也涉及暂存区或工作区文件内容的变更。 HEAD指针指向最近一次提交,表示当前版本。并且:
#还原工作区文件,还原后与暂存区内容一致
git checkout file1 file2
#还原工作区所有文件变更
git checkout .
#还原暂存区,工作区不变
git reset HEAD
#还原暂存区与工作区,工作区变更丢失
git reset --hard HEAD
#回退到上一次提交,暂存区也回退,工作区不变
git reset HEAD^
#回退到上一次提交,暂存区和工作区都回退,工作区变更丢失
git reset --hard HEAD^
#回退到上一次提交,暂存区与工作区都不变
git reset --soft HEAD^
#回退到上一次提交(增加一个提交节点来回退)
git revert HEAD^
stash 用于临时存储工作现场(包括工作区和暂存区),为切换到其他分支开发再还原回来提供支持。stash 命令执行后暂存区和工作区被还原成版本库内容,所有变更消失。 stash 是堆栈结构,允许多次 stash ,再 pop 按照后进先出还原。
#存储工作现场
git stash
#存储工作现场,并指定名称
git stash save "work1"
#查看 stash 列表
git stash list
#恢复最近一个工作现场
git stash pop
#恢复指定工作现场
git stash apply stash@{0}
#删除指定工作现场
git stash drop stash@{0}
#删除所有工作现场
git stash clear
#查看提交历史
git log
#查看提交历史,单行缩略显示
git log --oneline
#查看提交历史,包含文件变更统计
git log --stat
#查看提交历史,图形化显示
git log --graph
#查看提交历史,单行缩略显示,图形化显示
git log --oneline --graph
#查看file1文件的第 300 到 350 行的变更历史
git blame -L 300,350 file1
全局设置命令别名后,可以直接用别名替代命令,提高输入效率。
#设置命令别名
git config --global alias.st "status"
git config --global alias.co "checkout"
git config --global alias.ci "commit"
git config --global alias.md "commit --amend"
git config --global alias.br "branch"
gitflow 是一种常用的 git 工作流,用于管理大型项目,其分支结构如下:
其中:
注意:hotfix、feature、release在完成开发合并回develop和master后可以删除。
forking 工作流用于开源项目,其流程图如下:
forking 工作流中,项目的官方仓库只有维护者自己有权限写,其他开发者只能 fork 维护者的仓库,然后提交 pull request。项目维护者可以查看所有 pull request,并决定是否合并。
.gitignore 文件用于忽略某些文件,避免提交无用的文件。
约定式提交是一种基于提交消息的轻量约定,提供了一组用于创建清晰提交历史的简单规则。便于通过自动化工具提取变更历史。 格式如下:
<类型>[可选的作用域]: <描述>
[可选的正文]
[可选的脚注]
//注意:用英文冒号,且后面有一个空格。
其中:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有