git的开发流程和常用命令

1,837 阅读4分钟

前言

git相比svn做代码管理,感觉更有优势,这两者的区别体现在以下几点:

  • 1、首先,工作原理不一样,svn是一种集中式的版本控制器,git是一种分布式的版本控制器。svn只有一个中心仓库,所有开发人员维护同一个服务器上的代码。而git不同,每个开发人员的本地都是一个独立的服务器仓库。
  • 2、其次,分支管理不一样,svn的分支是全局的,你修改一个分支,所有人必须同步这个分支,才能进行其他操作。git可以本地建立多个分支,并且自由切换,不会影响到其他人。如果有需要就合并到master分支,然后push到远端服务器,让大家同步;如果没用也可以直接delete掉。
  • 3、另外,安全机制不一样,svn容易出现单点故障,如果服务器宕机,那么所有人都无法工作了。git的话,即使服务器挂了,每个研发的本地都相当于一个服务器,还可以进行正常的开发工作。

使用git的基本流程:

一般来讲 我们都是基于工作开发使用git的,首先在gitlab搭建自己服务器,再由管理员去给你分配账号权限,如果你是提交代码到个人的githHub上,你得先自己去申请账号。

1、配置用户名和邮箱

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

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

2、生成公钥并添加

ssh-keygen -t rsa -C ”yourEmail@example.com”

最后显示成:

在这里可以看到id_rsa和id_rsa.pub已经生成,并且生成的路径为/root/.ssh/。

打开id_rsa.pub文件,并且复制全部内容。(路径 C:\Users\admin.ssh)。

打开GitLab账户,打开SSH Keys: 添加git秘钥

3、拉取代码

4、增加/删除文件

$ git add file1 file2 ....  //  添加指定文件到暂存区
$ git add [dir]            // 添加指定目录到暂存区,包括子目录
$ git add .                // 添加当前目录下的所有文件到暂存区
$ git rm  file1 file2 ...     // 删除指定文件,并将本次删除放入暂存区
$ git rm --cached file    //停止追踪该文件,但该文件会保留在工作区
$ git mv [file-original] [file-renamed]  // 改名文件,并且将这个改名放入暂存区

5、代码提交

$ git commit -m [message]  // 提交暂存区到仓库区
 
$ git commit [file1] [file2] ... -m [message] // 提交暂存区的指定文件到仓库区

$ git commit -a // 提交工作区自上次commit之后的变化,直接到仓库区

$ git commit  -v  // 提交时显示所有diff信息
$ git commit --amend -m [message] // 使用一次新的commit,替代上一次提交, 如果代码没有任何新变化,则用来改写上一次commit的提交信息

$ git commit --amend [file1] [file2] ...// 重做上一次commit,并包括指定文件的新变化

6、 分支的创建与删除

$ git flow feature start <branch-name>   // git-flow 创建 feature 分支
$ git flow feature finish <branch-name>  // git-flow 结束 feature 分支
$ git flow release start 1.1.5          // git flow 创建release 分支
$ git flow release finish 1.1.5        // git flow 结束release 分支
$ git branch                           // 列出所有本地分支
$ git branch -r                        // 列出所有远程分支
$ git branch -a                       // 列出所有本地分支和远程分支
$ git branch [branch-name]            // 新建一个分支,但依然停留在当前分支
$ git checkout -b [branch]           // 新建一个分支,并切换到该分支
$ git branch [branch] [commit]       // 新建一个分支,指向指定commit
$ git checkout [branch-name]         // 切换到指定分支,并更新工作区
$ git checkout -                    // 切换到上一个分支
$ git merge [branch]                // 合并指定分支到当前分支
$ git cherry-pick [commit]          // 选择一个commit,合并进当前分支
$ git branch -d [branch-name]       // 删除分支
$ git push origin --delete [branch-name]  // 删除远程分支
$ git branch -dr [remote/branch]         // 删除远程分支

7、查看状态和历史记录

$ git status       // 显示有变更的文件
$ git log         // 显示当前分支的历史版本
$ git log --stat  // 显示提交历史以及每次提交发生变更的文件
$ git shortlog -sn // 显示所有提交过得用户,并按提交次数排序
$ git diff         // 显示暂存区和工作区的差异
$ giy diff --cached [file] // 显示暂存区和上一个提交的差异
$ git diff HEAD          // 显示工作区与当前分支最新提交的差异
$ git show [commit]      // 显示某次提交的源数据和内容变化
$ git reflog           // 显示当前分支的最近几次提交
$ git blame [file]  // 显示指定文件是什么人在什么时间修改过

8、 远程同步与撤销暂存

$ git fetch [remote]    // 下载远程仓库的所有变动
$ git remote -v        // 显示所有远程仓库
$ git remote show [remote]   // 显示某个远程仓库的信息
$ git remote add [shortname] [url]  // 增加一个新的远程仓库,并命名
$ git pull [remote] [branch]  // 取回远程仓库的变化,并与本地分支合并
$ git push [remote] [branch]  // 上传本地指定分支到远程仓库
$ git push [remote] --force  // 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --all   // 推送所有分支到远程仓库
$ $ git reset --hard  //重置暂存区与工作区,与上一次commit保持一致
$ git checkout .  // 恢复暂存区的所有文件到工作区即撤销暂存
$ git checkout [file] // 恢复暂存区的指定文件到工作区
$ git checkout [commit] [file]  // 恢复某个commit的指定文件到暂存区和工作区
$ git stash       //  暂时将未提交的变化移除,稍后再移入

以上是所有git工作中常用的一些基本操作命令,在实际开发中,也许你会觉得这种用命令化的操作提交代码比较痛苦,下面将会为大家带来一篇关于git可视化管理工具的SourceTree使用,用图形界面的操作替代这种黑窗口命令,让你对代码的管理更加轻松自如。

下一篇 SourceTree跳过注册安装和使用