Git的基础用法总结

前言

大家好! 因为我们公司刚刚从svn转到git上来,很多同事还不太熟悉git的操作,所以给大家准备了一次基础培训,然后也借这个机会,把自己对git的认识整理成技术博客的形式,也算给自己的知识进行一个梳理和沉淀。

Git账户配置

首先需要本地电脑上安装了git的命令行工具,并且在git的代码服务器上创建自己的git账号,这些就不详细介绍了。拿到账号以后,我们按下面的方法进行账户配置:

git config --global user.name "Administrator"  // 设置自己的用户名
git config --global user.email "[email protected]" // 设置自己的全局邮箱
git config --global core.autocrlf input // 当团队跨平台开发时需要设置 
ssh-keygen -t rsa -C "[email protected]" -b 4096 // 会在~/.ssh/里生成ssh的密钥对
  1. autocrlf 为了解决行尾结束符的问题,因为windows系统会用回车+换行,而linux和mac只使用换行字符 ;mac和linux系统把core.autocrlf设置成input来告诉 Git 在commit时把CRLF转换成LF,pull时不转换;而windows系统设置成ture来在pull时把代码LF换成CRLF
  2. ssh-keygen会生成一对基于ssh协议的公私密钥对,可以用来验证身份,做SSH无密码登录等功能。把这个生成的密钥放到git账户的ssh keys配置中就可以就行无密钥身份认证了。
  3. 配置好以后可以用ssh -T git@git服务器名来测试是否可以连接成功

Git仓库的连接

本地连接git的远程仓库有3种情况:

  1. 第一种是最简单的一种。本地直接克隆一个远程的仓库进行版本维护:
git clone http://gitlab.gsoms.com/develop/fronts/xxx/git-project.git // 克隆
cd git-project // 进入本地目录
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
  1. 第二种是最常见的一种。本地已经有了一些开发过的代码,希望能够推送到远程的仓库中去和团队一起开发。
cd existing_folder
git init
git remote add origin http://gitlab.gsoms.com/develop/fronts/xxx/git-project.git
git add .
git commit -m "Initial commit"
git pull origin master --allow-unrelated-histories // 因为本地的版本和远程的版本没有关系,所以需要加上--allow-unrelated-histories来强制更新合并版本
git push -u origin master
  1. 第三种是把自己已经维护在git服务器上的代码,从一个地址迁移到另一个地址下
cd existing_repo
git remote rename origin old-origin
git remote add origin http://gitlab.gsoms.com/develop/fronts/h5/git-project..git
git push -u origin --all // 推送所有的分支以及commit
git push -u origin --tags // 推送所有的tag

Git的文件状态变化

本地工作目录下面的文件状态不外乎两种:已跟踪或未跟踪。已跟踪状态下的文件在工作了一段时间以后,它们的状态可能处于未修改已修改已放入暂存区。状态的变化可以用下面的UML图来表示:

未跟踪 未修改 已修改 已暂存 git add . 修改 git add git commit git rm 未跟踪 未修改 已修改 已暂存
git status // 查看当前文档的状态
git add . // 暂存已经修改的文件或者未跟踪的文件
git commit // 提交已经暂存的文件,这里面只会提交已经暂存的修改,暂存以后修改的内容不会被提交
git commit -a  -m "提交的注释" // 跳过暂存区,提交所有的文件
git diff // 比较工作目录中当前文件和暂存区域快照之间的差异, 也就是修改之后还没有暂存起来的变化内容。
git diff --staged // 查看已经被暂存的变化(将要添加到下次提交里的内容)

git rm --cached README // --cached可以把文件从 Git 仓库中删除(即从暂存区域移除),但仍然希望保留在当前工作目录中。
git rm log/\*.log // 删除log/目录下扩展名为.log的文件
git rm \*~ // 删除以~结尾的所有文件。

git diff本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动
而带上 –staged 则会显示暂存文件的改动

git的撤销操作

如果你提交代码时,漏了几个文件没有提交,或者提交的信息写错了,可以像下面一样操作:

git commit -m 'initial commit'
git add forgotten_file
git commit --amend // 会提示让你重新输入提交的信息

如果你希望取消暂存的文件,因为想分开来提交代码,可以用reset命令:

git add *
git status
 On branch master
 Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    renamed:    README.md -> README
    modified:   CONTRIBUTING.md
git reset HEAD CONTRIBUTING.md // 可以取消暂存的文件
 Unstaged changes after reset:
 M	CONTRIBUTING.md

本地分支与远程分支

分支这个概念很常用:比如开发某一个新的功能,但是老的功能又希望继续开发,这时候就会很容易想到创建一个新的分支。或者写着新的功能,老的功能突然被发现了紧急的bug需要修复等等。

git branch -b {{branch}} // 创建一个新的分支,并且切换到新的分支上去
git push origin {{branch} // 推送到远程分支,远程分支名和本地分支名相同
git fetch origin // 从服务器上抓取数据,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并。
git merge origin/{{branch}} // 将远程的工作合并到当前所在的分支 
git pull origin {{branch}} // 获取远程分支代码并且合并分支

如果想要显示的更改本地分支所跟踪的远程分支,可以使用 -u或者 --set-upstream-to选项

git branch -u origin/serverfix

可以通过git branch -vv来查看所有分支的信息,如:每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后
如果你想删除分支的话,可以用 -d来删除

git branch -d dev // 删除本地dev分支
git push origin -d dev // 删除远程dev分支

Git Flow版本流程管理

首先,项目存在两个长期分支:

master 主干 — 主要存放对外发布的版本,任何时候都要保证主干的代码是正确、可用的
develop 开发 — 存放最新的开发版本

其次,项目存在3个短期分支:

功能分支(feature branch)— 当有新的功能需要开发时
补丁分支(hotfix branch)— 当主干上有紧急的bug需要被修改
预发分支(release branch)— 当功能都已经开发完,准备上线,进行集成测试时

这些分支在结束之后会被合并到develop和master上

关于git-flow的流程,参考这里

猜你喜欢

转载自blog.csdn.net/gunner6/article/details/84674862