Git 操作笔记

2019/01/15 工具使用

由于工作中一直用的是 SVN, 所以有时候在用 Git的时候某些命令就会想不起来,这里单独记录下.

Git简介

日常操作

忽略文件修改

  • 忽略规则
*.o
/Manager   # 仅仅忽略项目根目录下的 Manager 文件,不包括 subdir/Manager 
build/    # 忽略 build/ 目录下的所有文件
doc/*.txt   # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

当重新修改忽略文件后,规则不能立马生效,需要先清除缓存,在重新 add

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

初始化配置

初始化配置用来首次安装 git 后执行的配置命令

git config --global user.name "username"

git config --global user.email "user@mail.com"

配置SSH

ssh-keygen -t rsa -C "user@mail.com""

提交代码

  • 初始化仓库
git init
  • 对指定文件添加跟踪
git add xxx.file

git add 命令后面可以跟具体的文件名称,或者通配符(*.h)

git add . 把工作区所有的变化添加到暂存区,包括修改的和新添加的
git add -u 仅添加已经修改的文件(git add –update 的缩写)
git add -A 以上功能的合集 (git add –alll 缩写)
  • 撤销上次 add 操作
 撤销所有 add 的文件
 git reset HEAD .

 撤销某个文件
 git reset HEAD -xxx.cpp

  • 添加远程仓库地址(和远程仓库建立链接)
git remote add origin git@github.com:kevinlq/LQFramKit.git

以上命令用在第一次提交项目时,会将本地项目和远程仓库之间建立连接.

  • 提交
git push -u origin master

上述命令中 -u 是为了指定默认主机,这样以后提交是不需要任何参数,直接使用 git push 即可

  • 强制更新本地文件
git fetch --all
git reset --hard origin/master

查看log信息

  • git log –oneline

将日志输出为一行显示

  • git log -[length]

指定显示多少条日志,比如: git log -2 or git log --oneline -2

git log

分支操作

  • 列出本地分支信息
git branch
  • 列出远程分支信息
git branch -r
  • 列出本地和远程所有分支
git branch -a
  • 新建分支, 停留在当前分支
git branch [branch-name]

例如
git branch dev
  • 新建分支, 并切换到该分支
git checkout -b [branch]

例如:
git checkout -b dev

git log

  • 切换到指定分支
git checkout [branchname]

例如:
git checkout master
  • 新建分支后提交到远程
git push -u origin dev
  • 删除分支(本地)
git branch -d [branchname]

例如:
git branch -d dev
  • 删除远程分支
git push origin --delete [branchname]
git branch -dr [remote/branch]

标签相关操作

标签用来给某个历史提交版本打标记,以示重要,一般常用来给某个功能标机发布节点(V1.0等)

  • 列出所有 tag
git tag
  • 新建一个 tag
git tag [tag]

例如:
git tag -a v1.0 -m "version 1.0"
  • 删除一条 tag
git tag -d [tag]

– 查看 tag 信息

git show [tag]
  • 提交指定的 tag
git push [remote] [tag]
  • 提交所有的 tag
git push [remote] --tags
  • 删除远程仓库标签
git push origin :refs/tags/标签名

git push origin :refs/tags/protobuf-2.5.0rc1

gitmodules操作

添加一个子模块

git submodule add <url> <path>
  • url: 远程仓库地址
  • path: 本地存放仓库的路径(如果不设置,默认在当前工程目录中,一般建议放在3rrdparty目录中)

示例:

git submodule add https://github.com/wangwenx190/framelesshelper.git 3rrdparty/framelesshelper

指定子模块分支

子模块添加进来后,其实和正常仓库时一样的,可以在子模块中进行切换分支操作,也可以在add 子模块前进行处理

git submodule add -b xxxbranch https://github.com/wangwenx190/framelesshelper.git 3rrdparty/framelesshelper/xxxbranch

更新子模块

一般添加子模块后,对应路径中没有任何内容,这个时候就需要进行更新

git submodule update --init --recursive

更新子模块内容

如果引用的子模块更新了,那么就需要我们手动来进行跟新,进入到子模块目录:

git pull

之后,把所有更新改动提交到远程仓库即可

删除子模块

删除需要删除子模块涉及到的所有地方,执行以下命令即可:

  • 删除子模块目录中的内容
    rm -rf <submodule>
    
  • 删除子模块中内容
    vi .gitmodules
    
  • 删除git中子模块配置中的内容
    vi .git/config
    
  • 删除git中子模块中的目录
    rm -rf .git/mudules/<submodule>
    
  • 删除git中缓存的子模块
    git rm --cached <submodule>
    

一些问题

  • 上次 git 操作中途崩溃,引起 git 锁住
Another git process semms to be running in this repository, e.g. an editor opened by ‘git commit’. Please make sure all processes are terminated then try again. If it still fails, a git process remove the file manually to continue… 

解决办法:

找到项目根目录下的 `.git` 文件夹中,删除 `index.lock` 文件即可.
  • OpenSSL SSL_read: Connection was reset, errno 10054

由于网络等问题,连接超时,访问不可达

解决方法

关闭 SSL 校验

git config --global http.sslVerify "false"

升级 git 客户端

首先确认下本地版本

git --version

升级命令

2.17.1之前用git update
2.17.1之后用git update-git-for-windows

参考文章


作者:鹅卵石
时间:  2019年1月15日22:54:35
版本:V 0.0.1
邮箱:kevinlq@163.com
版权:本博客若无特别声明,均属于作者原创文章,欢迎大家转载分享。但是,
希望您注明来源,并留下原文地址,这是对作者最大的尊重,也是对知识的尊重。

如果您对本文有任何问题,可以在下方留言,或者Email我.

捐赠

如果觉得分享的内容不错,可以请作者喝杯咖啡.


Show Disqus Comments

Search

    欢迎关注我的微信号

    一个不羁的码农

    不羁的程序员

    转载请注明出处!

    Table of Contents