Git使用总结

一、Git概述

Git是一个开源免费的分布式版本控制系统,Git的安装包和源码都可以在Git官网下载,Git官方推荐书籍https://git-scm.com/book/zh/v2,Git参考手册https://git-scm.com/docs。相对于其它版本控制系统,Git有如下特点:

1.开源免费: Git是根据GNU通用公共许可证版本2.0发布的,该版本是一个 开放源代码许可证,Git通过使用GPLv2来确保该软件对其所有用户都是开源免费的。

2.方便的分支模型: 使用Git可以方便快速地拉出独立的分支进行开发和尝试,而且分支可以回合到主线。

3.分布式: Git在本地就是一个完整的代码仓,几乎所有的操作都是在本地进行。Git分布式的特点使得它小而快,不需要联网也可以提交代码,GIt没有误删代码仓的风险,因为每一个本地的Git仓都相当于是一个备份。

二、Git配置

1.配置文件
优先级: 系统配置system < 全局配置global < 仓库配置local

git config --system    # /etc/gitconfig 或者 git安装目录\Git\etc\gitconfig
git config --global    # ~/.gitconfig
git config --local     # .git/config
git config -l           # 查看所有配置
git config --system -l  # 查看系统配置
git config --global -l  # 查看全局配置
git config --local -l   # 查看仓库配置

2.基本配置

git config --global user.name your_name                # 用户名
git config --global user.email your_email@example.com  # 用户邮箱
git config --global core.ignorecase false              # windows下大小写敏感
git lfs install                                        # lfs配置

ssh-keygen -t rsa -C "your_email@example.com"          # 生成公私钥对,建议默认路径、不设密码就行
                                                       # -t 指定密钥类型,默认是 rsa ,可以省略
                                                       # -C 设置注释文字,比如邮箱
                                                       # -f 指定密钥文件存储文件名
                                                       # 注意:ssh-key是配对使用,私钥 ~/.ssh/id_rsa放在本地,
                                                       # 公钥 ~/.ssh/id_rsa.pub拷贝到服务器或代码仓托管平台上

3.个性化配置

git config --global pull.rebase false  # 默认false: pull=fetch+merge,true: pull=fetch+rebase
git config –-global core.editor vim    # 配置编辑器,默认为vim
git config --global --unset user.name  # 删除用户名配置

三、获取仓库

1.初始化仓库

git init                # 将当前目录初始化为一个git仓,本质是创建了一个.git文件夹
git init --bare CI.git  # 创建一个名为CI的裸仓库(只有仓库文件没有工作区)

2.克隆仓库

git clone https://github.com/git/git.git git_source  # 克隆仓库,默认只在本地创建和检出主线master,可用-b指定为其它分支
git clone ./git_source/.git --bare                   # 克隆裸仓库
git svn clone svn_url                                # svn仓迁移到git

git remote -v                   # 查看关联的仓库,本地克隆的仓库默认关联了克隆的源仓库,关联名origin
git remote add origin2 git_url  # 添加关联其它仓库
git remote remove origin2       # 删除关联

四、修改代码

1.工作区

git status  # 查看仓库状态
            # deleted: 删掉的文件
            # modifide: 修改的文件
            # untracked files: 新增的文件,还不在仓库控制范围内,只能用add添加到暂存区
            
git stash [save "message"]    # 隐藏当前工作区,不包括新增的不在仓库控制范围内的文件
git stash list                # 查看所有的stash
git stash apply               # 恢复工作区,不删除stash
git stash drop                # 恢复工作区,删除stash
git stash pop stash@{number}  # 恢复工作区,并删除对应的stash
git stash clear               # 删除所有stash

2.分支管理

git branch             # 查看本地分支
git branch -a          # 查看所有分支
git branch branch1     # 从当前分支拉出分支
git checkout branch1   # 切换分支      
git checkout -b name   # 从当前分支拉出分支并切换到该分支

git merge branch1      # 将branch1分支合入到当前分支,产生新的commit节点,原来的不变
git rebase branch1     # 将branch1分支合入到当前分支,不产生新的commit节点,原来的改变

git branch -d branch1  # 删除分支
git branch -D branch1  # 强制删除分支
git checkout -- xx     # 撤销xx文件的修改
git checkout --        # 撤销所有文件的修改

3.回退版本

git reset --soft           # 差异保存到暂存区
git reset --mixed          # 差异保存到工作区
git reset --hard           # 差异不保存   

git reset --hard           # 相当于git reset --hard HEAD,回退到当前的版本,HEAD为当前版本的指针 
git reset --hard HEAD~     # 回退一个版本
git reset --hard HEAD~100  # 回退100个版本
git clean -xfd             # 清除工作区不在仓库控制范围内的文件

五、提交代码

1.本地提交

# (1)从工作区添加到暂存区
git add xx  # 添加xx文件
git add .   # 添加当前目录下所有文件
git add -A  # 添加所有文件
git add -u  # 除了新增的不在仓库控制范围内的文件

# (2)从暂存区提交到仓库
git commit -m "first commit"commit_message
git commit -F ~/commit_message

git commit --amend  # 修改最近一次提交的commit_message

2.更新代码

git fetch origin                  # 拉取远端仓库origin的所有分支到本地
git fetch origin branch1          # 拉取远端仓库origin的branch1分支到本地
git fetch origin branch1:branch1  # 拉取远端仓库origin的branch1分支到本地,并在本地创建对应分支

git merge origin/branch1          # 将远端分支合入到当前分支,产生新的commit节点,原来的不变
git rebase origin/branch1         # 将远端分支合入到当前分支,不产生新的commit节点,原来的改变
# 如果修改了同一个文件,合代码时会报冲突,比如冲突文件:
11111
<<<<<<< HEAD
22222
=======
33333
>>>>>>> branch1

# merge: 如果两边都有新的提交,当前的commit和要合入的commit都不变,创建新的commit合并两边代码,若有冲突冲突的文件保存到工作区,
# 解决完冲突删除标记冲突的符号再提交即可
# rebase: 如果两边都有新的提交,要合入的commit不变直接合入,当前的commit改变,与合入的代码共同生成一个新的commit,若有冲突
# 冲突文件保存在工作区,解决完冲突删除标记冲突的符号再提交或者:
git rebase --continue  # 解决完冲突继续合并
git rebase --abort     # 取消合并

3.推送到远端

git push origin master         # 将本地仓库的master分支推送到远端仓库origin的对应分支
git push -f origin master      # 强制推送,用本地仓库覆盖远端仓库,包括历史commit
git push origin master:master  # 将本地仓库master分支推送到远端仓库origin的master分支

六、其它

1.查看历史

git log     # 查看所有提交记录
git reflog  # 查看所有操作记录

git show commit_id --stat  # 查看某一次提交修改了哪些文件
git diff xx
git diff commit_id
git diff commit_id1 commit_id2

2.更新和推送

git pull origin branch1:branch2   # 将远端的branch1分支更新到本地branch2分支
git push origiin branch1:branch2  # 将本地branch1分支推送到远端branch2分支
git push origin master            # 如果只指定一端的分支则另一端是对应的分支

git pull origin master            # 默认配置pull.rebase=false: git pull = git fetch + git merge
git pull origin master --rebase   # 加参数或配置pull.rebase=true: git pull = git fetch + git rebase

3.patch
git diff commit1 commit2 > 1.patch
git apply --reject 1.patch
git format-patch 1.patch
git am *.patch
4.多仓管理
repo参考博客: Repo介绍
5.其它
1.解决git bash中文乱码问题
git config --global core.quotepath false
git bash的Text设置为 zh_CN UTF-8
2.git仓接受推送
git config receive.denyCurrentBranch ignore

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值