美文网首页
Git 学习笔记

Git 学习笔记

作者: _于曼丽_ | 来源:发表于2022-04-22 17:02 被阅读0次

    配置

    可以在全局范围做配置,也可以在项目范围做配置。全局范围的配置,会在当前登录用户的所有 Git 项目里面生效。项目范围的配置,只会在当前 Git 项目里面生效。

    配置文件所在位置:

    • 全局范围:~/.gitconfig
    • 项目范围:项目根目录/.git/config

    查看编辑配置文件

    git config -l [--global | --local]
    git config -e [--global | --local]
    

    配置用户信息

    git config [--global] user.name  "jack"
    git config [--global] user.email "jack@githumb.com"
    

    配置别名

    git config [--global] alias.st status
    git config [--global] alias.ci commit
    git config [--global] alias.co checkout
    git config [--global] alias.br branch
    git config [--global] alias.lg log --oneline --decorate --all
    

    忽略特殊文件

    ### 全局范围
    vi ~/.gitignore
    # 编辑配置文件
    .DS_Store
    # 指定全局配置文件
    git config --global core.excludesfile ~/.gitignore
    
    ### 项目范围
    cd 项目根目录
    vi .gitignore
    # 编辑配置文件
    # 参考:https://github.com/github/gitignore
    # 可以在项目的任意子目录中添加 .gitignore 文件,文件内的规则对 .gitignore 文件所在目录以及该目录的所有后代目录有效
    

    基本操作

    初始化

    git init
    ls -la
    .git 目录下是版本库
    

    添加文件

    git add .
    git commit -m '提交信息'
    

    修改文件

    git add .
    git commit -m '提交信息'
    

    删除文件

    git rm file
    git commit -m '提交信息'
    

    重命名文件

    git mv file newfile
    git commit -m '提交信息'
    

    移动文件

    git mv file directory/file
    git commit -m '提交信息'
    

    提交操作

    git commit -m '提交信息'   # 将暂存区内容提交到本地仓库
    git commit -am '提交信息'  # 将工作区内容添加到暂存区,然后再将暂存区内容提交到本地仓库
    git commit --amend -m '提交信息' # 使用一次新的 commit ,替代上一次 commit
    

    查看操作

    git status
    git log
    git log -10 --oneline --decorate --all --graph
    git log | grep '关键字'
    git reflog
    git show commit-id
    

    差异、撤销、回退操作

    差异

    # 比较工作区和暂存区
    git diff [file]
    
    # 比较暂存区和上次提交
    git diff --cached [file]
    
    # 比较工作区和上次提交
    git diff HEAD [file]
    
    # 比较工作区和某次提交
    git diff commit-id | HEAD | master | v0.1 [file]
    # 说明:HEAD branch tag 都是指针,指向某个 commit-id
    
    # 统计一下有哪些文件被改动,有多少行被改动
    git diff --stat
    
    # 比较两次提交之间的差异
    git diff old-commit..new-commit
    git diff master../origin/master
    git diff HEAD^..HEAD
    

    版本回退

    # 工作区 暂存区 版本库 都恢复到 commit-id
    git reset --hard commit-id [file]
    
    # 暂存区 版本库 恢复到 commit-id,工作区内容不变。如果不加参数,默认为 --mixed 
    git reset --mixed commit-id [file]
    git reset commit-id [file]
    
    # 版本库恢复到 commit-id,工作区 暂存区内容不变
    git reset --soft commit-id [file]
    

    撤销

    # 用暂存区的内容替换工作区的内容
    git checkout file
    git checkout .
    
    # 用上次提交的内容替换工作区和暂存区的内容
    git reset --hard HEAD [file]
    
    # 用上次提交的内容替换暂存区的内容,保留工作区的内容
    git reset --mixed HEAD [file]
    
    # 撤销某次提交的内容
    git revert commit-id                                    # 撤销某次提交的内容
    git revert -m 保留的分支序列号[1或者2] 某次合并的commit-id   # 撤销某次分支合并
    

    stash

    # 保存工作现场
    git stash
    
    # 恢复工作现场
    git stash pop
    
    git stash apply stash@{0}
    git stash drop stash@{0}
    
    # 查看工作现场
    git stash list
    

    分支

    分支就是一个指针,指向 commit,HEAD 也是一个指针,指向分支,比如 HEAD->master->commit。
    参考 分支

    查看分支

    git branch
    git branch -r   # 查看远程分支
    git branch -a   # 查看所有分支
    

    新建分支

    git branch dev          # 新建分支,新分支指向 HEAD 所指向的 commit ,该 commit 不一定是最新的 commit 
    git checkout dev        # 切换分支
    
    git checkout -b dev     # 新建并切换分支,新分支指向 HEAD
    
    git branch dev commit-id | HEAD^ | origin/dev | v0.1            # 新建分支,新分支指向某个 commit-id
    git checkout -b test commit-id | HEAD~10 | origin/dev | v0.1    # 新建分支,新分支指向某个 commit-id
    

    删除分支

    git branch -d dev       # 删除分支
    git branch -D dev       # 强制删除分支,当 dev 分支没有进行过合并的时候,普通 -d 无法删除 dev 分支,必须强制 -D 删除
    

    重命名分支

    git branch -m dev develop  # 把分支 dev 重命名为 develop
    

    合并分支

    git merge dev                       # 把 dev 分支合并到当前分支
    git merge dev --no-ff -m '提交信息'  # 把 dev 分支合并到当前分支,并且禁止使用快速合并
    

    切换分支

    git checkout master     # 切换到 master 分支
    git checkout -          # 切换到上一次的分支
    

    标签管理

    标签就是一个指针,指向某个 commit。标签和 commit 的关系就像域名和 ip 地址的关系。
    标签和分支没有关系,标签不属于某个分支,标签只是某个 commit-id 的别名。

    创建标签

    git tag v1.0                        # 在 HEAD 指向的 commit-id 处打一个标签
    git tag v1.0 commit-id
    

    删除标签

    git tag -d v1.0                     # 删除本地标签
    git push origin :refs/tags/v1.0     # 删除远程标签
    

    推送标签

    git push origin v1.0
    git push origin --tags
    

    远程

    参考 [远程][2]
    [2]: http://www.ruanyifeng.com/blog/2014/06/git_remote.html

    clone

    git clone 支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等。
    该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。
    克隆版本库的时候,所使用的远程主机自动被Git命名为origin,如果想用其他的主机名,需要用git clone命令的-o选项指定。

    git clone <版本库的网址>
    git clone <版本库的网址> <本地目录名>
    git clone -o <远程主机名称> <版本库的网址>
    

    remote

    Git要求每个远程主机都必须指定一个主机名,git remote命令就用于管理主机名

    git remote                          # 列出所有远程主机
    git remove -v                       # 列出所有远程主机以及远程主机的网址
    git remote add origin url           # 添加远程主机 origin
    git remote rm origin                # 删除远程主机 origin
    git remote rename origin hello      # 重命名远程主机 origin 为 hello
    git branch -a                       # 查看所有分支,包括远程分支
    

    fetch

    将某个远程主机的更新,取回本地,通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响

    # 将某个远程主机所有分支的更新,全部取回本地
    git fetch origin
    
    # 将远程主机的 master 分支的更新,取回本地
    git fetch origin master
    git checkout master
    
    # 将本地 master 分支与远程 origin/master 分支合并
    git merge origin/master
    # 或者
    # 将本地 master 分支 rebase 到远程 origin/master 分支
    git rebase origin/master
    

    pull

    取回远程主机某个分支的更新,再与本地的指定分支合并,相当于先 fetch 再 merge

    # 取回 origin 主机的 next 分支,与本地的 master 分支合并
    git pull origin next:master
    
    # 取回 origin 主机的 next 分支,与本地的当前分支合并
    git pull origin next
    

    push

    将本地某个分支的更新,推送到远程主机的指定分支。push 的执行结果必须是 "快速向前" (fast forward) 的,否则会报错。

    # 把本地 master 分支的更新,推送到远程主机 origin 的 next 分支
    git push origin master:next
    
    # 把本地 master 分支的更新,推送到远程主机 origin 的 master 分支。如果后者不存在,则会被新建
    git push origin master
    

    rebase

    参考:http://gitbook.liuhui998.com/4_2.html
    http://www.ruanyifeng.com/blog/2015/08/git-use-process.html?utm_source=tuicool&utm_medium=referral

    git fetch
    git rebase origin/dev
    git rebase -i origin/dev    # -i 可以合并多次 commit
    git rebase --abort # 将当前分支返回到 rebase 之前的状态
    git rebase --continue # 如果有冲突,解决冲突之后,先 git add . 然后 git rebase --continue ,就可以继续合并分支
    

    分支关联

    本地某个分支如果和远程主机的指定分支相关联,则 push 和 pull 操作都可以省略很多参数

    # 把本地当前分支的更新,推送到与本地当前分支相关联的远程分支
    git push
    
    # 取回与本地当前分支相关联的远程分支的更新,并且和本地当前分支合并
    git pull
    

    本地分支与远程分支可以手动建立关联,某些操作会自动关联

    # 自动将远程仓库的 master 和本地仓库的 master 关联。不管远程有几个分支,本地克隆的版本库只有一个 master 分支,其他的远程分支不会同步到本地,因为远程的 master 分支是默认分支。
    git clone url
    
    # 将本地 master 分支的内容推送到远程主机 origin 的 tester 分支,同时为这两个分支建立关联
    git push -u origin master:tester
    
    # 将本地 master 分支与远程主机 origin 的 tester 分支建立关联
    git branch --set-upstream-to origin/tester master
    
    # 在 origin/dev 指向的 commit-id 上创建本地分支 test ,并且把本地分支 test 与远程分支 dev 建立关联
    git branch test origin/dev
    git checkout -b test origin/dev
    # 如果只是把 origin/dev 指向的 commit-id 添加到 git branch test commit-id 或者 git checkout -b test commit-id,则新建的分支 test 不会与远程分支 dev 建立关联
    

    删除远程分支

    # 如果省略本地分支名,等同于推送一个空的本地分支到远程分支,相当于删除远程分支
    git push origin :master
    
    # 也可以通过 --delete 参数删除
    git push origin --delete master

    相关文章

      网友评论

          本文标题:Git 学习笔记

          本文链接:https://www.haomeiwen.com/subject/smunertx.html