gitk
工作区: 就是你在电脑里能看到的目录
暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
版本库: 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库
-- global
后,之后每次建立仓库的提交者身份信息都是这里的 name 和 email 所以第一次创建时一定要注意$ git config --global user.name "Your Name Comes Here"
$ git config --global user.email you@yourdomain.example.com
$ git config --global alias.co checkout // check 创建别名 co
$ git config --global alias.br branch // branch 创建别名 br
$ git config --global alias.ci commit // commit 创建别名 ci
$ git config --global alias.st status // status 创建别名 st
$ git config --global alias.visual '!gitk' // gitk 创建别名 visual 这里不是git子命令,因此前面加了!
$ git init // 在本地表现为新建的.git文件夹
$ git add . // 将当前文件夹下的内容全部推送到暂存区(后面跟文件名就是推送单个文件)
// 加入暂存区后,会跟踪当前文件的改变,直到 commit
$ git commit -m '版本1' // 创建版本信息,后面 -m '版本1' 为说明,该操作将暂存区内容推送到版本库
// 可以加 -a 参数,在 commit 的时候,可以省一步 git add ,但也只是对修改和删除文件有效, 新文件还是要 git add,不然就是 untracked 状态
$ git tag -a v1.0 -m "说明" // 通过该指令为最后一次提交打上标签(v1.0)后面的 -m 为标签增加说明信息
$ git tag -a v0.9 85fc7e7 // 也可以通过该指令给指定版本打标签(85fc7e7为版本号)
$ git tag -d tagname // 删除指定标签
$ git mv file_from file_to // file_from 改名为 file_to
add、commit
命令,将修改的文件推送到暂存区和版本库$ git checkout -- file // 这里区别于下面的分支切换和HEAD切换(加了--)
// 但上面是一个危险的命令。 你对那个文件在本地的任何修改都会消失——Git 会用最近提交的版本覆盖掉它
$ git reset HEAD file // 将修改回退到工作区
$ git reset HEAD -- file // 加双杠也是将修改回退到工作区
// 同样危险
git checkout -- file
就可以了git reset HEAD file
,可以回退到第1步(将修改回退到工作区)注意:
git中已提交的内容丢失了一般可以恢复,但未提交的一般都恢复不了,因此上面两项指令一般不常用到
git commit --amend
命令用来修复最近一次commit. 可以让你合并你缓存区的修改和上一次commit, 而不是提交一个新的版本
$ git reset --mixed // 将指定 commit id 撤回之后所有内容全部放进 工作区
$ git reset --soft // 将指定 commit id 撤回之后所有内容全部放进 暂存区
$ git reset --hard // 将指定 commit id 撤回并 清空 工作目录及暂存区所有修改
注意:
若 reset
后无参数,默认是 --mixed参数
$ git branch // 获取所有分支
$ git branch demo // 创建 demo 分支
$ git checkout -b demo // 创建一个分支 demo 并切换到其上工作
$ git switch demo // 切换到 demo 分支
$ git checkout demo // 切换到 demo 分支
$ git merge demo // 将demo分支与master分支合并
注意:
switch、checkout
切换分支的,一般至少要推送到暂存区或者撤销修改若出现上述问题,不想推送到暂存区或者撤销修改也可以使用stash
系列命令暂存当前状态
Tip:一般用于当前分支还未开发完,但是急需去其他分支操作的情况(如:去master分支debug)
$ git stash // 暂存当前状态
$ git stash list // 查看所有暂存的状态
$ git stash pop name // 切换到 name 的状态
应用
git stash
暂存当前状态git stash list
获取所有暂存状态,每个状态显示为stash@{0}: WIP on master: 450e7a1 asd
形式(stash@{0}
为每个状态的编号)git stash pop name
切换到编号为name
的状态 ,如 git stash pop stash@{0}
$ git merge demo // 将demo分支与master分支合并
$ git branch // 查看分支
// --merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支
$ git branch -d demo // 删除demo分支(本地)
$ git push name --delete Branch //删除远端仓库(name)中的 Branch 分支
$ git checkout -f test // 强制切换至 test 分支,丢弃当前分支的修改
$ git log // 查看历史记录
// 加 --p 参数来获取每个版本的详细信息(各版本的完整差异)
// 加 --oneline 选项来查看历史记录的简洁的版本
// 加 --reverse 参数来逆向显示所有日志
$ git diff // 显示已进行但尚未推送到暂存区的内容
// 加 --cached 参数,简单的显示已暂存的内容
$ git status // 获取git状态摘要
※ HEAD本质上是个指向 commit 对象的可变指针
$ git checkout HEAD~n // 往前回退n个版本
$ git log -1 HEAD // 查看最后一次提交
ssh-keygen -t rsa -C "you@yourdomain.example.com"
生成密钥(一路回车,也可以回车两次后输入密码,不输入密码就是默认无密码)type C:\Users\username\.ssh\id_rsa.pub | clip
指令将公钥复制到剪切板,直接粘贴到远程仓库中这里首先默认已经按照上面(创建本地仓库),通过git config
配置好个人信息,并配置好密钥了
$ git remote add name git@github.com:xxx.git // 连接远程仓库 name为仓库别名 后面是仓库地址
$ git remote -v // 查看当前远程仓库
$ git remote show // 查看远程仓库 name 的详细信息
$ git fetch name // 从远程仓库(name)拉取仓库中有但你没有的信息
$ git pull name master // 从远程仓库(name)拉取仓库中拉取 master 分支
通过 name/master
访问远程仓库(name)的master
分支
$ git push name master // 将本地的 master 分支推送到远程的 name 仓库
$ git rebase -i HEAD~n // 选择前n个版本合并(具体还有vim操作见下链接)
$ git rebase -i master demo // 将 demo 分支 rebase 到 master 分支
rebase 相关参考:https://blog.csdn.net/xiaozhidexiao/article/details/78509676