Git常用操作

411 阅读2分钟

git 是目前最常用的项目版本控制工具,git本身有很丰富的操作满足各种各样的需求,但是如此多的操作很可能让我们乱花渐入迷人眼,遇到具体问题时不知所措。我把平常自己项目最常用到的操作做了总结,大多数时候,这些操作就可以满足日常需求了.

初始化git配置

$ git config --global user.name "Shimer "
$ git config --global user.email shimer@mail.com

这些用户信息将应用于以后我们每次提交,十分重要,--global参数意思是为这台电脑上所有的项目都做这个配置。如果每个项目都需要不同配置,那就在相应项目下运行没有--global的命令。这样git就知道我们每次提交是谁,验证权限信息用哪个用户了。

克隆远程项目

$ git clone ${仓库地址} 

一般公司本身是有已存在项目在git仓库的,我们只需要拉取远程仓库的项目克隆到我们自己的电脑中即可.
这个操作默认会拉取远程的master分支的代码到我们本地并创建本地master分支。 如果遇到权限问题,可以检查一下是否配置了SSH公钥。

分支创建切换

接下来就是进入项目的开发阶段了。为了维护公司项目的安全性,一个项目会有好几个分支,master分支必须保持稳定可随时发布,所以一般开发不会在这个分支。那么就需要我们单独拉一个新的分支。分几种情况:

  • 项目有统一的开发分支,每个人在这个分支上开发;
  • 项目有统一的开发分支,每个人各设自己的分支开发,最后再合到统一开发分支上。
创建并切换分支
$ git checkout –b {branch_name} origin/branch

此时我们本地已经有远程的branch分支,并且切换到了{branch_name}分支。 如果不添加后面的远程分支名称 origin/branch,那么就是在当前分支的代码基础上新建分支。

关联远程分支

新建分支并没有关联到远程分支,也就是我们每次提交到远程的时候git并不知道应该提交到哪个远程分支,接下来运行

$ git branch --set-upstream-to=origin/{branch} {branch_name}

这样我们本地分支和远程分支就建立了联系。关联远程分支需要已存在。

$ git checkout branch origin/branch

用来切换已存在分支。

查看当前改动

git status

我们在开发的时候想要看我本地做出的修改,可以使用git status,这个命令会告诉你当前的修改文件,暂存的文件。

提交/拉取远程分支

想要理解git如何将本地代码托管到远程仓库的就需要我们首先了解git的仓库机制。
把不同阶段代码所处位置分成三个类型:本地,暂存区,远程仓库

本地仓库很好理解,就是我们本地文件所在,我们所有做出的变更首先保存在这里;暂存区可以想象成一个本地仓库和远程仓库衔接的缓冲区;远程仓库是代码统一托管的地址。具体提交操作如下:

  1. git add –A
    将所有本地修改文件提交到暂存区,如果希望提交某几个,那么运行git add {path1} {path2} …其中path是文件相对路径,不同文件间用空格隔开。
  2. git commit {path1} {path2} … -m "commit message"
    将文件提交到暂存区之后,给每次提交打一个标签提交到当前分支,方便我们后续查看提交历史,一旦遇到版本回退的情况能更好的定位到回滚版本。 -m后面跟的字符串是提交信息,写明此次提交的目的,修改bug或者新功能,这个信息十分重要,尽量简明扼要。Path同样是相对路径,不提供就默认提交所有暂存区文件到当前分支。 前两步可以合并成一个命令
git commit -a -m "message"
  1. git reset {commitHash}
    提交到暂存区并且打完标记之后,发现有个文件发生错误需要撤回,就要用到这个命令commitHash是想要回退到的commit hash值。一旦回退,那么这个hash值之后的提交所有的修改都变成未提交到暂存区状态,包括自己的和别人的。这点很重要,因为我们后续所做的操作一旦强制推送到远程仓库就会影响甚至覆盖别人的操作,所以尽量谨慎操作。
  2. git push
    将我们所有提交到本地分支的代码提交到远程库。如果本地分支没有创建相应的远程分支,可以使用git push origin {now_branch} 将创建对应名称的远程分支并完成提交。
  3. git log
    展示我们当前分支的提交历史,按q键退出。
  4. git pull
    用来获取其他人的提交,在多人协作的情况下容易出现冲突,这就涉及到处理冲突,这个时候一定要甄别保存哪块的更改,最好找到冲突代码作者当面对一下,防止覆盖掉他人代码。

暂时隐藏/恢复本地修改

$ git stash 
$ git stash apply

假设我正在开发一个新功能,但是这个时候亲爱的测试工程师提交了一个紧急bug给我,并且不停强调这个bug的严重性,那么我就要优先去处理这个bug。很显然没有开发完成的新功能我不想提交,但是不提交就没办法切换新的分支,这个时候就可以应用git stash,将我们本地的修改暂时保存一下,然后git checkout {bug_branch},修改完成提交之后在切换成本地分支,运行 将之前保存的修改释放出来。需要注意的是,这个stash命令是不区分分支的,也就是无论在哪个分支应用git stash apply都会将上一次保存的内容应用。

拷贝文件

$ git checkout

常用的功能有两个,一个是切换分支,上面已经讲过,另一个是将另一分支的一个文件或者文件夹完全拷贝到本地: git checkout {other_branch} {path}。 这个操作很具有侵略性,除非你确定将其他分支的整个文件拷贝过来,否则很可能覆盖本地分支做的一些修改。

获取某次提交所有变更

$ git cherry-pick {commit_hash}

将某一次提交的更改合并到当前分支,运行完本地就拥有了相应提交的变更。

合并分支

$ git merge

当我们完成了整个功能的开发,需要我们将自己的分支合并到一个集体开发分支上。需要首先切换到集体分支,然后运用git merge {my_branch},合并完成后,git push完成提交。

以上基本包含了整个工作流常用的git操作,欢迎拍砖。