用git管理版本,你必须知道的事情


用git管理版本,你必须知道的事情


git是一个版本控制工具, 版本控制主要的好处有三点:

  1. 从当前版本回退到任意版本
  2. 查看历史版本
  3. 对比两个版本差异

git

相关术语

<code>repository  仓库branch      分支summary     摘要track       跟踪modify      修改stage       暂存commit      提交push        推送pull        拉取clone       克隆amend       修改merge       合并conflict    冲突origin      源upstream    上游downstream  下游verbose     详情reflog      参照日志复制代码/<code>

git基础

  1. modified: 已修改, 修改了项目但没有提交到本地数据库, 也就是没有git add
  2. staged: 已暂存, 就是执行了git add,但是没有git commit
  3. committed: 已提交, 保存在本地数据库, 就是执行了git commit

git基本工作流程

  • 写代码
  • 对修改的文件进行快照, 保存到暂存区域中
  • 提交代码, 将暂存区域中的文件快照上传到git中

基本配置

查看当前的git配置:

<code>git config --listgit config user.namegit config user.email//通过git config -h了解更多的git配置查询复制代码/<code>

修改当前配置(一般只需要配置一次, 但是如果换了电脑, 或者更换了系统我们就需要从新配置):

<code>//用户名配置git config --global user.name "xiaohuochai"//邮箱配置git config --global user.email "[email protected]"复制代码/<code>

项目配置.gitignore

当我们提交项目到git时, 有很多文件是不需要提交的, 比如node_modules, .vscode, .idea等等

这是我们需要在项目的根目录下新建.gitignore文件

<code>node_modules//*/node_modules/.idea.vscode复制代码/<code>

配置ssh

当我们从github远程服务器pull和push代码时, 如何验证提交和拉取的代码是谁? 为了避免每次输入用户名, 密码的麻烦, 我们可以通过配置ssh来解决。

查看本机的ssh:

<code>//ssh一般存在.ssh中//打开命令行cd ~/.ssh           //进入对应目录ls                  //如果有可以看到私钥id_rsa文件和公钥id_rsa.pubcat id_rsa.pub 或者 vim id_rsa.pub      //查看文件内容复制代码/<code>

如果没有, 我们可以通过下面命令生成

<code>ssh-keygen复制代码/<code>

接下来, 我们复制公钥的内容,登录github

在右上角头像下拉settings -> SSH and GPG Keys中点击 New SSH Key进行添加。

通过ssh -T [email protected]命令来验证SSH是否配置成功。

git基本操作

  • 初始化新仓库
<code>git init复制代码/<code>
  • 查看文件状态
<code>git status复制代码/<code>
  • 文件跟踪
<code>git add xxx         //跟踪某个文件git add .           //批量跟踪复制代码/<code>

文件是否add成功, 我们可以通过git status再检查一次

  • 文件提交本地仓库
<code>git commit              //提交文件到本地仓库git commit -m 'xxx'     //xxx是你本次提交的信息说明git commit -am 'xxx'    //将所有已跟踪的文件暂存起来一并提交复制代码/<code>
  • 推送远程仓库
<code>git push origin xxx//你可以通过-u指定一个默认的源, 这样以后push就不用加origingit push -u origin xxx//以后就可以git push复制代码/<code>
  • 拉取远程仓库
<code>git pull origin xxx//可以简写git pull, 如果提示no tracking information, 我们可以通过下面方法建立追踪,后续就可以直接git pull了git branch --set-upstream branch-name origin/branch-name复制代码/<code>
  • 差异比较
<code>git diff复制代码/<code>
  • 查看提交历史
<code>git log                 //按提交时间列出所有的更新,最近的更新排在最上面git log --oneline       //查看简要的历史记录git reflog              //用来记录每一次命令, 常用来辅助版本切换复制代码/<code> 

一次正常的代码提交流程

<code>git pullgit add .git commit -m 'xxx'git push复制代码/<code>

git版本切换

有时候业务场景, 或者需求变更等各种因素, 需要我们切换回之前的某个版本。

要进行版本切换, 我们就得知道当前处于哪个版本:

<code>git log --oneline复制代码/<code>

带有HEAD字样的就是我们当前所在版本, 通过git reset --hard id命令切换版本。 id可以是:

<code>- HEAD^ : 上个版本- HEAD^^: 上上个版本- HEAD~10: 上10个版本复制代码/<code>

当你切换回上某个版本之后, 通过git log你就看不到最新版本了,这时我们就可以使用git reflog了, 这个命令会按照之前经过的所有的commit路径排列。

git分支管理

我们一般开发都会从master分支分离出dev或者其他开发分支, 用来开发, 这样即使开发出现问题也不会影响主分支。

使用git branch xxx创建一个新的分支。

使用git checkout xxx切换到新的分支

branch, checkout常用命令:

<code>git checkout -b xxx         //可以快速新建并切换到新的分支git branch -d xxx           //当分支合并到主分支, 这个分支就可以通过-d删除了git branch -D xxx           //删除那些没有被合并的分支git branch -a               //查看所有分支复制代码/<code>

分支合并

注意: 分支合并时, 你一定要保证你在要合并到这个分支的目标分支上

使用git merge xxx即可将xxx分支合并到你当前所在的分支。

正常的合并分支很简单, 这样就ok了, 但是分支合并, 如果在不同的分支修改了同一个文件的同一部分, 此时git是无法判断该使用哪个分支的代码的, 这样就会产生冲突,虽然git进行了合并, 但并没有提交, 需要我们解决冲突, 重新提交。

我们可以通过git status查看是哪些文件发生了冲突,然后逐一解决, 当我们把冲突的代码按正确的代码修复后, 需要重新git add, git commit, git push。

操作远程仓库

clone远程仓库

通过git clone url来克隆远程仓库

比如:

<code>//这个默认会在你拉取的路径下新建一个blog-mason的文件夹git clone https://github.com/MasonEast/blog-mason.git   //如果你不想要文件夹blog-mason, 你可以这样, 在url后面,空格加新名字git clone https://github.com/MasonEast/blog-mason.git newName//如果你就想要在当前路径下放项目文件, 不要那个外面的文件夹了, 可以用.git clone https://github.com/MasonEast/blog-mason.git .复制代码/<code>

查看远程仓库git remote

我们克隆的仓库通过git remote会看到一个叫origin的远程库, 这是git默认标识克隆的原始仓库

通过git remote -v或git remote --verbose我们可以查看到更加详细的信息,即对应的项目地址, 正常会有两个, 但如果你没有push权限的话就只能看到一个fetch的地址。

<code>git remote -vorigin  [email protected]:MasonEast/blog-mason.git (fetch)origin  [email protected]:MasonEast/blog-mason.git (push)复制代码/<code>

删除远程分支

<code>git push origin :xxx//也可以git push origin --delete xxx复制代码/<code>

删除远程仓库

<code>git remote rm xxx复制代码/<code>

重命名远程仓库

<code>git remote rename oldName newName复制代码/<code>

关于误操作

git主要用于版本控制, 协同开发, 误操作可以撤销, 但是有的撤销是不可逆的, 我们一定要慎重对待, 不然可能导致部分代码丢失。

修改最后一次提交

场景: 某次提交完后, 发现少提交了文件, 我们需要撤销刚才的提交, 然后重新提交。

<code>git add xxx             //添加少提交的文件到暂存区git commit --amend      //往最后一次提交中追加少提交的文件, 这次提交不会产生记录复制代码/<code>

移除本地仓库的文件

场景: 我们通过git commit将文件提交到本地仓库后, 才想起来把不想提交的文件加进去了。

<code>git rm xxx  复制代码/<code>

移除暂存区的文件

场景: 有时候我们习惯性git add ., 但有的文件我们不应该提交, 这时要从暂存区中移除文件。

<code>git reset HEAD xxx      //从暂存区中移除xxx文件复制代码/<code>

后话

上述只是日常工作可能会用到的基本操作,这里做一个小小的整理, 还有很多git进阶学习的命令请登录git官方站学习



分享到:


相關文章: