git基操

262 阅读5分钟

使用前配置

设置用户名和email

git config --global user.name 'Your Name'
git config --global user.email 'your email'

生成秘钥

$ ssh-keygen -t rsa -C "liuchao102@163.com"

生成完秘钥之后会在 C:\Users\Administrator.ssh 目录下 id_rsa和id_rsa.pub 两个文件,拷贝id_rsa.pub文件内容到 git 服务器上就可以了

mac获取秘钥方法

$ cd ~/.ssh
open ./

每次都提示输入用户名和密码

git bash进入你的项目目录,输入: git config --global credential.helper store 然后你使用上述的命令配置好之后,再操作一次,然后它会提示你输入账号密码,这一次之后就不需要再次输入密码了 用户名和密码为远程仓库的用户名和密码

git提交四件套

  • 添加到暂存区
    git add <file>
  • 提交到本地仓库,(保存一个快照)
    git commit -m <message>
  • 拉取远程仓库
    git pull --rebase
  • 推送到远程
    git push

每次操作可以通过git status实时查看状态

diff操作

工作区和暂存区的差异
git diff

暂存区和最后一次commit之间的差异
git diff --cached 或 git diff --staged

工作区和暂存区,与最后一次commit文件变更差异
git diff HEAD

比较两个分支差异(详细)
git diff <branch1> <branch2>

比较两个分支差异(不详细)
git diff <branch1> <branch2> --stat

撤销操作

撤销工作区更改

文件回到最近一次·git commit或者git add的状态,也就是只能撤销还没有add或者commit过的更改

git checkout -- fileName
git checkout .

撤销暂存区更改

文件执行了git add操作,没有commit

git reset HEAD fileName

HEAD是指向当前版本的指针,HEAD^表示上个版本,HEAD^^表示上上个版本

撤销本地仓库的提交

HEAD是指向当前版本的指针,HEAD^表示上个版本,HEAD^^表示上上个版本

查看提交记录
glo

回到上一次提交
git reset --soft HEAD^
回到某一次提交
git reset --soft [commitId]

git reset三种模式

  • --hard:重置位置的同时,直接将working Tree工作目录、 index暂存区及 repository 都重置成目标节点的內容,所以效果看起来等同于清空暂存区和工作区
  • --soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和目标节点保持一致,所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中
  • --mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区和 Repository 中的內容更改和目标节点一致,以效果看起来就是原节点和目标节点之间的所有差异都会放到工作目录中

特殊情况,如果某次提交已经push到远程,git reset --hard回退之后,本地版本落后于远程 要通过git push --force提交到远程

分支操作

查看分支
git branch
创建分支
git branch <branchName>
切换分支
git checkout <branchName>
创建并切换分支
git checkout -b <branchName>
在本地创建和远程分支对应的分支
git checkout -b branch-name origin/branch-name
本地分支和远程分支没有创建连接
git branch --set-upstream-to <branch-name> origin/<branch-name>
删除本地分支
git branch -d <name>
丢弃一个没有被合并过的分支
git branch -D <name>
删除远程分支
git push origin --delete <name>
查看分支合并图
git log --graph

分支合并

分支代码变动全部转移到另一个分支
git merge --no-ff -m 'fdfd' <name>

cherry-pick

分支代码变动只有部分(某几个cimmit)转移到另一个分支 ,可以使用cherry-pick

某次提交应用于当前分支
git cherry-pick <commitId>
某几次提交应用于当前分支
git cherry-pick <commitId1> <commitId2>
连续提交应用于当前分支(commitId1 早于 commitId2,且不包含commitId1)
git cherry-pick <commitId1>..<commitId1>
连续提交应用于当前分支(commitId1 早于 commitId2,且包含commitId1)
git cherry-pick <commitId1>^..<commitId1>

revert

git revert丢弃某次提交,丢弃某个提交本身作为一次新的提交,常用于想对齐之前的某次提交,但是又想保留之后的提交,git reset的区别是,他用于回退到某个版本,之后的版本全部丢弃

git revert <commitId>

保存和恢复代码修改

当突然要切到另一个分支操作,需要保存当前工作区的修改时候,需要用到git stash

保存修改
git stash
查看保存记录
git stash list
恢复最近一次保存
git stash pop
清空保存
git stash clear

打标签操作

git tag <tagname> //用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."//可以指定标签信息;
git tag//可以查看所有标签。
git push origin <tagname>//可以推送一个本地标签;
git push origin --tags//可以推送全部未推送过的本地标签;
git tag -d <tagname>//可以删除一个本地标签;
git push origin :refs/tags/<tagname>//可以删除一个远程标签。

手头工作没有完成,需要切换分支,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场 git stash list //查看所有stash

设置别名

第一种方式,进入根目录下的.gitconfig编辑,cd ~/.gitconfig

[user]
        name = yuetong
        email = liu666@163.com
[alias]
        ga = git add .
       

第二种方式,在命令行中 git config --global aliais.ga "git add ."

上面一顿操作之后,试了一下,好使,于是又设置了一些其他的别名,但是就发现有些能用,有些不能用,一顿排查,废了很长时间问题如下: 原来我的 zsh 安装了 oh-my-zsh,不知道是我自己安装还是默认自带了一个 git 插件,进入到插件里面一看,设置了很多别名,原来被插件覆盖掉了,所以自己设置的不好使了,不过也可以借鉴下插件是如何设置别名的,问题到此为止

alias ga='git add'
alias gaa='git add --all'
alias gcmsg='git commit -m'
alias gup='git pull --rebase'
alias gp='git push'
alias gb='git branch'
alias gbD='git branch -D'
alias gcp='git cherry-pick'
alias grh='git reset'