git实操命令篇

git配置
# 身份验证失败清除密码缓存
git config --system --unset credential.helper
# 取消频繁身份验证
git config --global credential.helper store
# 设置代理
git config --global http.proxy url
git config --global https.proxy url
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
# 生成sshkey 
ssh-keygen -t rsa
# 查看sshkey
cat ~/.ssh/id_rsa.pub
递归克隆
git clone --recursive
git diff

用于比较两次修改的差异

### 获取差异
git diff # 不加参数即默认比较工作区和暂存区
git diff --cached [<path>...] # 比较暂存区和最新本地版本库(本地库中最近一次commit的内容)
git diff HEAD [<path>...] # 比较工作区和最新本地版本库,如果HEAD指向的是master分支,那么HEAD还可以换成master
git diff commit-id [<path>] # 比较工作区和指定commit-id的差异
git diff --cached [<commit-id>] [<path>] # 比较暂存区和指定commit-id的差异
git diff [<commit-id>] [<commit-id>] # 比较两个commit-id之间的差异

### 使git diff打补丁
git diff > patch  # patch的命名是随意的,不加其他参数时作用是当我们希望将我们本仓库工作区的修改拷贝一份到其他机器上使用,但是修改的文件比较多,拷贝量比较大此时我们可以将修改的代码做成补丁,之后在其他机器上对应目录下使用 git apply patch 将补丁打上即可
git diff --cached > patch  # 是将我们暂存区与版本库的差异做成补丁
git diff --HEAD > patch  # 是将工作区与版本库的差异做成补丁
git diff Testfile > patch # 将单个文件做成一个单独的补丁
git apply --check patch # 如果没有任何输出,那么表示可以顺利接受这个补丁
git apply --reject patch # 将能打的补丁先打上,有冲突的会生成.rej文件,此时可以找到这些文件进行手动打补丁
git branch && git checkout
### git branch
git branch # 不带参数,列出本地已经存在的分支,当前分支用*标记
git branch -r # 查看远程分支列表
git branch -a # 查看所有分支列表,包含远程和本地
git branch dev # 创建名为dev的分支,创建时要是最新的环境,但依然停留在当前分支而不是新分支
git branch -vv # 可以查看本地分支对应的远程分支
git branch -m oldname newname # 给分支重命名


### git checkout:操作文件,操作分支
# 操作文件
git check out filename # 放弃单个文件的修改
git checkout . # 放弃当前目录下的修改
# 操作分支
git checkout master # 将分支切换到master
git checkout -b dev # 如果分支存在则切换到该分支,如果不存在则创建并切换

git merge && git rebase
git merge dev # 在当前分支合并dev分至,-m 可加描述内容;如冲突,先解决冲突,再 git add、git commit、最后再git merge

git rebase dev # 在当前分支合并dev分支;如冲突,先解决冲突,再 git add、不需 git commit,而是直接运行 git rebase --continue(这样git会继续应用剩下的补丁);如果不想解决冲突且不再合并,可git rebase --abort

# 区别:
merge会产生一个新的commit,记录每个分支的详情(不够简洁,易造成分支杂乱);rebase 会合并之前的commit 历史(不易定位出错代码)

git merge与git rebase区别详解

git stash

将当前的工作状态保存到git栈,在需要的时候再恢复;常用于解决冲突;

git stash # 保存当前的工作区和暂存区的状态,把当前的工作隐藏起来,等以后需要的时候再恢复;git stash这个命令可以多次使用,每次使用都会新加一个 stash@{num},num是编号
git stash pop #恢复默认git栈中的一个stash@{num},建议在git栈中只有一条的时候使用,以免混乱
git stash list # 查看所有保存在栈区的状态列表
git stash apply stash@{num}# 恢复被隐藏的文件,但是git栈中的这个不删除;如果我们在 git stash apply的时候工作目录下的文件一部分已经加入了暂存区,部分文件没有,当我们执行git stash apply之后发现所有的文件都变成未暂存,如果想维持原来的样子,即暂存过的依旧是暂存状态,使用 git stash apply --index(推荐)
git stash drop stash@{num} #删除指定进度,无指定默认删除最新一个(比pop推荐使用)
git stash clear # 删除所有存储的进度
git stash show stash@{num} # 显示指定stash的内容
git pull

作用上 git pull = git fetch + git merge

git pull <远程主机名> <远程分支名>:<本地分支名>
git push
git push <远程主机名> <本地分支名>:<远程分支名>
# 示例:
git push origin master:master

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

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

### 当前本地分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push origin
#从已有本地分支创建远程关联分支
git branch --set-upstream-to= origin/远程分支名  本地分支名

# git push -u origin master
如若当前分支与多个主句存在追踪关系,则可以使用-u参数指定一个默认主机,这样后面直接使用git push即可
# 注:不带任何参数的git push,默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应远程分支的本地分支,git2.0之前默认使用matching,现在改为simple方式;可以使用git config 查看和修改;

# refs/for
// refs/for 的意义在于我们提交代码到服务器之后是需要经过code review之后才能进行merge的,而refs/heads不需要;
git撤销操作:本地工作区/暂存区/版本区;远程仓库;
  1. 工作区:未使用git add的时候

    git checkout -- filepathname   #放弃修改某个文件
    git checkout .  # 放弃所有修改的文件
    git restore . # 放弃所有修改的文件
    
  2. 暂存区:已使用git add,未使用git commit

    git reset HEAD filepathname # 恢复某个文件到工作区
    git reset HEAD . # 恢复所有文件到工作区
    git reset # 恢复所有文件到工作区
    
  3. 版本区(本地仓库):已使用git commit

    ### 全部撤回并同步到远程仓库最新状态
    git reset --hard HEAD^  #回退到上一次commit状态,^多少个就往前回退多少
    git reset --hard commit_id #回退指定版本,id可用git log查看
    git pull origin branch
    
    ### 拉回工作区并保存修改,只撤销commit和add(保存代码修改)
    git reset --mixed HEAD^
    git reset HEAD^
    
    ### 撤销commit,但不撤销add(保存代码修改,并保留到暂存区)
    git reset --soft HEAD^ # 只撤销git commit一步
    
    ### 撤销所有修改,回到远程最新的版本(不保留代码修改),通用于暂存区
    git fetch --all 
    git reset --hard origin branch
    
  4. 远程仓库:已使用git push

    ### 回滚远程分支的最近一次提交(会在远程生成一个版本号,慎用)
    git revert HEAD
    git push origin branch
    
    ### 
    git reset --hard HEAD^ #回退上一个版本
    git reset --hard commit_id #回退到某个版本
    git push origin HEAD --force #强制推送到远程,可能会受到保护
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值