关于git的一些使用分享


关于版本控制

什么是版本控制?我为什么要关心它呢?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。我们除了可以对软件代码作版本控制管理之外,还可以在其他方面也实行版本控制,可以对任何类型的文件进行版本控制,例如多人协作完成大型的文学作品的时候。

版本控制又分为:

  • 本地版本控制系统
  • 集中式版本控制系统
  • 分布式版本控制系统

为什么使用版本控制(好处)

使用版本控制,方便多人协作开发时的代码合并;
可以使我们对文件,代码等的修改情况有一个清晰的记录,当新的修改不满意时,可以准确的回滚到先前的版本;
当本地代码因各种原因损坏时,可以迅速的从仓库还原至本地;
同时当多人协作的时候,可以明确成员各自做了什么修改,当代码/文本等产生bug的时候便于追根溯源.

常用工具

  • SVN(集中式)
  • Git(分布式)
    注意 git ≠ GitHub,一个是工具,一个是平台
git-logo
GitHub-logo

Git的安装

在 Linux 上安装

在Linux安装,以CentOS 上为例,一般使用 yum的方式:

  $ sudo yum install git


其他Linux版本参考Git 官方网站上的各种系统的安装步骤,网址为 http://git-scm.com/download/linux。

在 Mac 上安装

在 Mac 上安装 Git 有多种方式。 最简单的方法是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令即可。 如果没有安装过命令行开发者工具,将会提示你安装。
或者前往下载相关安装包:http://git-scm.com/download/mac。

在 Windows 上安装

在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开 http://git-scm.com/download/win,下载会自动开始。 要注意这是一个名为 Git for Windows的项目(也叫做 msysGit),和 Git 是分别独立的项目;更多信息请访问 http://msysgit.github.io/。

另一个简单的方法是安装 GitHub for Windows。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的 CRLF 设置。 稍后我们会对这方面有更多了解,现在只要一句话就够了,这些都是你所需要的。 你可以在 GitHub for Windows 网站下载,网址为 http://windows.github.com。

配置

用户配置
如下配置一次,避免后面每次操作都需要输入用户信息

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

安装完成后,使用Git还需要做一些配置用于向远程仓库拉取和推送代码,其中需要在本地生成私钥和公钥文件,以Mac为例,执行以下命令:

    ssh-keygen -t rsa -C "xxx@hauxi100.com"

最后可以在 ~/.ssh 目录下找到生成的 id_rsaid_rsa.pub 文件,即相应的私钥和公钥,用编辑器打开查看id_rsa.pub 复制其中内容到GitHub或者GitLab用户中心相关的设置中,就可以开始使用Git了.

开始使用

1.对本地现有项目进行Git管理

进入项目根目录并使用如下命令进行初始化:

    git init

这样会在项目根目录生成.git目录,其中含有相关的文件
接下来需要将项目中的全部文件加入版本控制

    git add *.c

并提交到第一个版本,加入说明

git commit -m '第一次提交初始化版本'

2.从仓库获取项目

此时需要知晓仓库地址并进行git clone操作,仓库地址在GitHub/Gitlab网站上可以看到 例如成都范儿项目:

    git clone git@**.***.***:****/***.git

等待项目克隆完毕即可开始开发,上述命令后跟上自定义目录名可以将项目克隆到指定目录中
使用git remote -v 列出远程仓库
使用git remote show origin查看远程仓库更多信息

3.提交第一次修改

每次当对项目进行修改,删除,新增后需要提交新版本时,需要执行以下命令:

    git status

用于查看有何变化,这会列出当前项目的变化情况,包含较于上一版本有变化的文件信息

On branch production
Your branch is up to date with 'origin/production'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   ../****/***/***/VoteController.php

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    ../***/***/****/laravel-debugbar/
no changes added to commit (use "git add" and/or "git commit -a")

此时我们应该将状态为modified的文件加入新版本中执行:

    git add ../****/***/***/VoteController.php
    git commit -m "这是一次提交,修改了某某文件...."

此时完成了一次提交,但是并没有推送到远程仓库中,还需要:

 git push

这样这个版本的代码已经推送到远程仓库,其他用户执行git pull(相当于fetch => merge)即可拉取到刚刚推送的修改(也可使用git push origin xxxx来推送到指定分支)

4.进一步操作

每次需要向仓库做操作时应该先执行git status查看当前项目有哪些发生变化;

查看尚未add的文件相比之前发生什么变化,使用git diff命令(这个命令本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动);

需要查看最近提交过哪些版本时,使用git log查看版本信息(包含版本号,提交者,提交时间等),其中git log -p -2 可以查看最近两次提交的内容差异

合并

git merge xxx

解决冲突

有时候合并会遇到文件冲突,需要先git status查看冲突情况,并且手动去解决冲突文件,然后使用git add文件

当把错误代码提交到commit时,需要使用git reset --hard xxxx来撤销这条commit

当错误代码已经push到仓库,使用git revert xxxx来撤销push

  • 如果出错内容在私有 branch:在本地把内容修正后,强制 push (push -f)一次就可以解决;
  • 如果出错内容在 master:不要强制 push,而要用 revert 把写错的 commit 撤销。

5.在IDE中使用Git(PHPstorm)

项目中右键->git->各个详细操作

其他

在 Git 中有一个特殊的文本文件:.gitignore。这个文本文件记录了所有你希望被 Git 忽略的目录和文件。

常用命令

git checkout  ##检出 (用于创建/切换分支),**慎重使用**

git status  ##查看当前项目状态(修改,新增,删除等)

git checkout -b ##检出(指定分支)

git commit  ##提交版本

git diff  ##比较文件差异

git add  ##提交指定文件到版本

git clean ##删除所有没有被版本控制过的文件

git fetch --prune  ##从仓库获取内容

git pull --ff-only  ##获取内容并且合并

git branch  ##查看当前分支名
git branch -d xxx ##删除分支

git push  ##推送

git merge xx ##合并分支

git rm  ##删除文件

git mv  ##移动文件 相当于mv => rm => add操作

git rebase ##高级合并

git reset  ##撤销commit 

git revert  ##撤销push

git push origin :yourbranch  ##推送到指定分支

部分内容参考出处 Git 原理详解及实用指南