Git基本使用指南

前言

开发过程中会遇到各种各种的问题,我们必须要代码稳定,这个时候就需要版本管理工具了,有了版本管理工具,遇到bug的时候,就可以自己新开一个分支然后在分支上解决该 bug, 解决之后然后在合并到开发分支就好。既能保证现有代码的质量还能更好的解决问题。 以前的开发方式比较混乱,好多人都在往一个分支上提交代码,这样不能保证项目的稳定性,也比较危险,如果那个人 执行了 git push origin :develop 就会将开发分支的代码删除掉,这下子如果之前没有和 master 上的代码合并过的话,那就损失惨重了。好像也没有办法 review 代码,所以使用正式的开发流程,git 工作流; git 工作流的过程:创建分支 develop 作为开发分支,等开发的差不多了,经过测试可以使用,合并到 master 主干上,然后通过主干分支 release 版本。所以这个时候 develop 分支其实就充当了一个缓冲分支。develop 分支大家可以一起开发,如果某个人的功能相对改动量比较大的话,自己可以在自己的本地创建一个分支,用于自己功能特性的开发。等时机成熟然后合并到 develop ,然后在 push 到远端。 因为在开发中我们经常会使用tag 命令对项目进行打 tag, 标记这个版本是在哪个具体的时间点,比如我们开发项目中版本 1.8.6.14306有问题的话,那么我们需要检出当前时刻的版本号码,在对应的时刻修复bug.修复完成之后合并到主干分支就好。

常用基本命令

创建仓库

  1. 本地创建仓库

    • Git全局设置
    $ git config --global user.name "weiTeng"
    $ git config --global user.email "weiteng4droid@163.com"
    
    • 本地没有已经存在的仓库
    # 创建本地仓库目录
    $ mkdir pinyougou
    $ cd pinyougou
    # 创建本地仓库
    $ git init
    $ touch README.md
    $ git add README.md
    # 提交到本地
    $ git commit -m "Add README.md"
    # 设置远程的仓库地址
    $ git remote add origin https://gitee.com/ywtty/pinyougou.git
    # 推送到远程仓库
    $ git push -u origin master
    
    • 本地已经存在的仓库
    # cd pinyougou
    # git remote add origin https://gitee.com/ywtty/pinyougou.git
    # git push -u origin master
    
    • 新修改最新的提交,改正作者和提交者的错误信息
    $ git commit --amend --allow-empty --reset-author
    

    说明:

    • 参数--amend是对刚刚的提交进行修补,这样就可以改正前面错误的提交(用户信息错误),而不会产生另外的新提交。
    • 参数--allow-empty是因为要进行修补的提交实际上是一个空白提交,Git默认不允许空白提交。
    • 参数--reset-author的含义是将Author(提交者)的ID重置,否则只会影响最新的Commit(提交者)的ID。这条命令也会重置AuthorDate信息。
  2. 克隆仓库

    $ git clone https://github.com/weiteng4droid/MineWidget.git
    
    // 或者使用 ssh 方式克隆分支
    $ git clone git@git.coding.net:weiteng/oa.git
    
    // 克隆指定的分支:如 develop 分支
    $ git clone -b develop https://github.com/otale/tale.git	
    

更新分支

  1. 从远端分支获取最新到本地不合并

    $ git fetch origin master           从远端的master分支下载最新版本代码
    $ git fetch 					    获取服务端最新的分支及tag等
    $ git log -p master..origin/master  比较本地master分支和origin/master分支的差别
    $ git merge origin/master           合并远端分支最新的代码到本地
    
  2. 直接从远端的分支更新到本地并合并

    $ git pull origin master            更新远端 master 分支代码并合并到本地的 master 分支
    

提交代码本地

  1. 添加本地修改并提交

    # 添加代码到本地的暂存区
    $ git add .             
    # 进入编辑器界面查看修改变更,并填写修改日志
    $ git commit --verbose           
    
  2. 提交远程

    # 查看提交的修改的代码并写提交的备注
    $ git push origin master            提交到远程的分支
    $ git push -f 						强制覆盖远程分支
    
  3. 查看提交日志

    # 显示提交日志
    $ git log
    # 显示日志,提交的文件变更统计
    $ git log --stat
    commit 2cc71c49361293636e0ccc493e6c4dcf81e70def (HEAD -> master)
    Author: weiTeng <weiteng4droid@163.com>
    Date:   Mon Dec 10 10:51:03 2018 +0800
    
        添加新的程序文件
    
        Signed-off-by: weiTeng <weiteng4droid@163.com>
    
     Demo.java | 8 ++++++++
     test.py   | 2 ++
     2 files changed, 10 insertions(+)
    

回滚代码

$ git reset --hard  <提交的摘要啥sha1值> 回滚到这一次提交
$ git reset --soft  <提交的摘要啥sha1值> 回滚到这一次提交

两者的区别:

hard: 就会导致原来的提交的代码丢失;
soft: 之前修改的代码不会丢失,会放到暂存区。

解决冲突

可以使用git 工具内部的 vim 编辑器进行解决,建议使用桌面图形化工具处理冲突,效率比较高。或者使用桌面客户端工具。

修改Commit log

有时候发现提交代码的 log 写错了,这个时候可以修改提交的log
$ git commit -m "修改相关bugg"
发现多写了一个 g, 可以使用如下的命令来修改提交日志。
$ git commit --amend
会进入一个 vim 的界面,然后修改首行的提交日志即可。

分支操作

查看所有分支

$ #git branch -a:列出所有的本地分支以及远程的分支

查看远端分支

$ git branch -r:列出远端仓库的所有分支

查看本地分支

$ git branch
带*号的表示当前所在的分支。

同步远程分支到本地

$ git fetch   同步服务端最新的分支以及 tag 到本地。注意,git fetch 更新到分支的代码并不会自动合并,如何需要再次合并的操作话,需要操作 git merge origin/xxx, xxx表示当前的分支。

删除本地分支

$ git branch -d <branch_name>  删除本地已经合并的分支
$ git branch -D <branch_name>  删除未合并的分支

重命名分支

$ git branch -m <old_branch_name> <new_branch_name>

删除远程分支

$ git push origin :<branch_name>  删除远程分支可能无法恢复
$ git push origin --delete <branch_name>          
以上两个命令删除远程分支都不可恢复

创建分支

$ git branch <branch_name>       分支名称          
$ git branch -b <branch_name>   创建分支并切换分支

切换分支

$ git checkout <branch_name>  
切换分支之前需要提交本地或者当前的分支的代码,否则可能会导致当前分支的代码丢失。

合并分支

某个分支的代码开发到一定程度的时候需要向主要分支(master、develop)合并,以用于后续的测试,发布操作等。切换到合并的分支下, 如: git checkout master被合并分支合并到主分支, 如: git merge bugFix以上完成了,bugFix 分支到主干分支(master)的合并,合并之后 bugFix 的新特性将存在于 master 分支上。

  • 注意:分支合并之后可能会出现很多冲突,可以借助 IDE 工具解决冲突, 然后可以删除不必要的分支,保留主干。

rebase 命令的使用

$ git checkout mywork
$ git rebase develop

这些命令会把你的 `mywork`分支里的每个提交取消掉,并且把它们临时保存为补丁(这些补丁放到`.git/rebase`目录中),然后把  “mywork”分支更新到最新的 'develop'分支,
最后把保存的这些补丁应用到‘mywork’分支上。如果在操作的过程中出现任何问题,任何时刻可以终止。

发布分支

// 发布分支指的是同步相应分支的代码到远程仓库
$ git push origin <branch_name> 提交并发布分支

标记操作

暂存区

  1. 保存当前代码到暂存区

    $ git stash
    
  2. 查看暂存区列表

    $ git stash list
    # {0}: 表示第一个暂存的内容
    stash@{0}: WIP on master: f6e6cba 更新 README.md
    
  3. 恢复暂存区内容

    # 表示恢复第一个暂存区暂存的内容
    $ git stash pop
    

切换指定 tag 下查看并修复bug

$ git checkout -b bugFix v1.8.6.14306 : 会创建一个新的分支 bugFix, 然后将tag 的代码克隆进去

里程碑--标签(可以列出仓库所有的标签)

  1. 列出仓库(本地仓库)中的所有标签

    git tag 
    
  2. 查看标签的详情信息

    git show <tag_name>
    

创建标签

  1. 创建普通标签

    $ git tag -a <tag_name>  例如: git tag -a v1.0.2
    
  2. 创建附注标签

    $ git tag -a v1.0.2 -m "修复了xx bug",修复了某个版本的bug 的时候创建的标记
    

    注意:轻量标签是指向提交的引用,附注标签则是仓库中的一个独立的对象。所以建议使用附注标签。

删除标签

  1. 删除本地标签

    $ git tag -d <tag_name>     例如: git tag -d v1.0.2
    
  2. 删除远程标签

    $ git push origin :refs/tags/<tag_name> 
    $ git push origin --delete <tag_name>       
    

    例如:

    $ git push origin :refs/tags/v1.0.2
    $ git push origin --delete v1.0.2
    

发布标签

  1. 推送指定标签到远程服务器

    $ git push origin <tag_name>  例如: git push origin v1.0.1
    
  2. 推送本地的所有标签到服务器

    $ git push --tags  
    

    注意: tags 前边两个中划线, 推送本地所有的分支到远程仓库。 切换到指定的标

    git checkout <tag_name>     例如: git checkout v1.0.1
    

    注意:不建议这么做,因为这样操作会导致,header 指针向前移动,可能会导致代码的丢失,建议创建的一个新的分支,然后 checkout 一个 tag 的代码。

git 忽略规则

仓库中已经添加过了 .gitignore 文件规则内的文件导致忽略失效的解决方法; 失效产生的原因是由于我们在创建本地仓库的时候,没有加载 .gitignore 文件,然后提交了,后续加入的 .gitignore 文件就不会被 git 扫描,而失去作用。

  1. 后加入忽略文件清理缓存

    $ git rm -r --cached xxx,-r 代表递归删除,对xx文件夹中的所有文件处理,取消掉 git 的控制缓存,如果是文件,不用加上 -r)
    

    然后再次提交 git commit -m "Remove xx 文件或者文件夹" 提送远程 $ git push origin <branch_name>

  2. 整体情况下,应该先添加 .gitignore 文件到本地仓库中,然后,添加添加代码,这样忽略规则是正常启用的。

常见问题:

提交代码后发现提交日志中显示的用户名和邮箱不对的修改办法

  1. 修改当前仓库或者工程的用户名和邮箱

    $ git config user.name			    # 显示当前的用户名
    $ git config user.name "weiTeng"  	# 修改当前的仓库用户名为weiTeng
    
    $ git config user.email 			# 显示当前的用户邮箱
    $ git config user.email "weiteng4droid@163.com"	# 设置当前的用户的邮箱
    
  2. 修改全局配置

    $ git config --global user.name     # 显示全局用户名
    $ git config --global user.email	# 显示全局的用户邮箱
    

Can't update: no tracked branch

No tracked branch configured for branch oem.
To make your branch track a remote branch call, for example,
git branch --set-upstream oem origin/oem
Commit failed with error:
Unable to create 'C:/Users/xxxx/git/xxxxx/.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
  • 解决方法:

    # linux系统命令行
    $ rm -f .git/index.lock
    
    # windows系统命令行
    > del .git\index.lock
    

提示警告信息

warning: LF will be replaced by CRLF in xx/xxx.xml.
  1. 问题产生的原因:

    windows 中的换行符为CRLF,而在linux下的换行符号为LF,在执行git add.命令的时候在命令行窗口中会自动的替换为了linux的LF。

  2. 解决方法:

    # git config core.autocrlf false  禁用自动转换换行符。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值