GIT相关信息整合

原创
2020/07/02 19:18
阅读数 782

一、GIT常用命令

1、本地操作

  • git init

# 初始化工作区
git init
  • git clone

# 从远程仓库克隆项目
git clone 仓库地址
  • git add

# 添加文件/文件夹到缓存(Index)
# . 代表所有文件
# * 代表模糊匹配
git add 文件名

---

# 他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add .

# 他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -u

# 是上面两个功能的合集(git add --all的缩写
git add -A

---

# 添加所有变更文件
git add .

# 添加 指定 文件
git add test01.py  test02.py

# 添加  文件名  test 开头的文件
git add test*

# 添加 后缀为 .py 的文件
git add *.py
  • git status

# 列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit)的文件
git status
# git status命令可以列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit)的文件.。
# 比如;

git status

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   2.txt
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   1.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       1.log

# 命令中”Changes to be committed“中所列的内容是在Index中的内容,commit之后进入Git Directory。
# 命令中“Changed but not updated”中所列的内容是在Working Directory中的内容,add之后将进入Index。
# 命令中“Untracked files”中所列的内容是尚未被Git跟踪的内容,add之后进入Index
# 通过git status -uno可以只列出所有已经被git管理的且被修改但没提交的文件。

# 比如:

$ touch 3.txt
$ git add 3.txt
$ git status -uno

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   1.txt
#       new file:   3.txt
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   2.txt
#
# Untracked files not listed (use -u option to show untracked files)

# 这里1.txt,2.txt两个文件都是曾经被提交过的文件。
# 1.txt被修改且被执行了git add。
# 2.txt被修改但还没被执行了git add。
# 3.txt是新建的文件,已经被执行了git add。
# 另外注意,我们可以通过git add -i 命令查看<path>中被所有修改过或已删除文件但没有提交的文件,它有类似git status的功能。
  • git commit

    • 提交文件到本地仓库
    • 参数 -m msg 提交信息
    • 参考: http://www.oschina.net/news/69705/git-commit-message-and-changelog-guide
    • 提交信息推荐为以下格式
      • feat:新功能(feature)
      • fix:修补BUG
      • docs:文档(documentation)
      • style: 格式(不影响代码运行的变动)
      • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
      • test:增加测试
      • chore:构建过程或辅助工具的变动
      • 例如:
        • feat: 添加手机端订单接口
        • fix: 修复对账单信息错误
git commit -m 'fix:变更信息'
  • git reset

# 回溯历史分支

# 历史提交hash值 默认参数为--mixed ; soft和mixed不会修改文件的内容hard会修改文件内容
git reset --[soft|mixed|hard]

    # 恢复git提交(HEAD)
    git reset --soft
    
    # 恢复git提交和缓存区(HEAD和Index)
    git reset --mixed
    
    # 恢复git提交和文件内容(全恢复)
    git reset --hard 
  • git branch

# 创建一个新的分支(不会切换到新分支)
git branch 分支名称

# 列出远程分支
git branch -r

# 列出本地分支和远程分支
git branch -a

# 重命名分支
git branch -m | -M oldbranch newbranch

# 删除branchname分支
git branch -d | -D branchname

# 删除远程branchname分支
git branch -d -r branchname
  • git checkout

# 检出分支
git checkout 分支名称

# 以当前分支为目标复制一个分支(用B参数会强制覆盖已有分支)
git checkout -b[B] 分支名称

# 检出一个完全空白的分支
git checkout --orphan 分支名称
  • git fetch

# 更新差异到本地仓库(只更新本地仓库,不影响所有分支代码)
git fetch [数据源] [分支名]
git fetch origin master
  • git merge | rebase

# merge合并分支
git merge [数据源]/[分支名]
git merge origin/master

# rebase重定基点
git rebase 目标分支

  • git log

# 查看Git日志
# 参数 -n number 查看最新n条记录
git log -n 5

2、远程操作

  • git config

# 配置git参数

# 设置用户名
git config --global user.name "username"

# 设置邮箱
git config --global user.email "email"
  • git remote

# 不带参数,列出已经存在的远程分支
git remote

# 列出详细信息,在每一个名字后面列出其远程url,此时, -v 选项(译注:此为 –verbose 的简写,取首字母),显示对应的克隆地址。
git remote -v | --verbose

# 添加一个远程仓库
git remote add <仓库名称> <仓库地址>

# git更新远程分支列表
# 当主仓库添加分支后,本地仓库找不时,可以尝试同步下远程分支目录到本地。
git remote update origin --prune

# Git 修改远程仓库地址
git remote origin set-url <仓库地址>
  • git push

# 将本地版本库的分支推送到远程服务器上对应的分支

# 例如 git push origin HEAD:master 把当前分支推送到origin的master分支上
git push 远程仓库名称 本地分支:远程分支

---

# 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin master

# 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
git push origin :refs/for/master

# 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支 
git push origin

# 如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名
git push

# 如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,不带任何参数的git push,
# 默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应的远程分支的本地分支, Git 2.0之前默认使用matching,
# 现在改为simple方式如果想更改设置,可以使用git config命令。
# git config --global push.default matching OR git config --global push.default simple;可以使用git config -l 查看配置
git push -u origin master

# 不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要 -all 选项
git push --all origin

# git push的时候需要本地先git pull更新到跟服务器版本一致,如果本地版本库比远程服务器上的低,那么一般会提示你git pull更新,如果一定要提交,那么可以使用这个命令。
git push --force origin

# git push 的时候不会推送分支,如果一定要推送标签的话那么可以使用这个命令
git push origin --tags

二、基本描述

  • HEAD(头)

    • 指向当前branch最顶端的一个commit,该分支上一次commit后的节点
  • Index(索引)

    • The index, 也可以被认为是staging area(暂存区),是一堆将在下一次commit中提交的文件,提交之后它就是 HEAD的父节点. (git add添加的文件)
  • Working Copy(工作副本)

    • 当前工作目录下的文件,(一般指,有修改,没有git add,没有git commit的文件)
展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部