欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Git基本使用指南

程序员文章站 2022-06-04 18:22:59
...

前言

开发过程中会遇到各种各种的问题,我们必须要代码稳定,这个时候就需要版本管理工具了,有了版本管理工具,遇到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 "[email protected]"
    
    • 本地没有已经存在的仓库
    # 创建本地仓库目录
    $ 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 [email protected]: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 <[email protected]>
    Date:   Mon Dec 10 10:51:03 2018 +0800
    
        添加新的程序文件
    
        Signed-off-by: weiTeng <[email protected]>
    
     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}: 表示第一个暂存的内容
    [email protected]{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 "[email protected]"	# 设置当前的用户的邮箱
    
  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  禁用自动转换换行符。