常用
1.远程分支强制覆盖本地当前分支
git fetch --all //从远程下拉代码
git reset --hard origin/分支名 //更新到目标分支
git pull //更新
add之前,放弃没add的修改
git checkout -f
2.合并之前的多次commit为一个
git rebase -i HEAD~要合并的最近几次commit的数量
// 自动跳入一个页面,vim模式把前几行中第一行的pick保留,要压缩掉的其他的几行的第一列pick都改成s,保存退出
// 又跳入一个页面,vim模式修改提交的注释,保存退出
git push -f //因为要删掉一些原来的commit,所以要强制push
3.删除远程分支
git push origin -delete referVerify
4.用gerrit代替直接用git时,本地也是在master上开发(之前是在分支上开发,把master pull下来到最新,分支与master rebase),这样当远程master向前走了以后,直接git pull
(git fetch + git merge FETCH_HEAD)会产生菱形结构且gerrit提交失败,提示在改别人的分支。这时应该用git pull --rebase
等于git fetch + git rebase FETCH_HEAD
一.git的工作方式
Git 保存的不是文件差异或者变化量,而只是一系列文件快照
一个文件对应一组不同版本用blob格式存储的快照。
git所有数据存储前都要计算校验和,然后以校验和来引用。
二.git使用步骤
*新电脑上用的时候要创建ssh key并添加到网站的账号里
git config --global user.name "youremail"
git config --global user.email "youremail@domain.com"
ssh-keygen -t rsa -C "描述当前的是哪个用户"
//三次回车,把提示目录下的pub ssh key,添加到gitlab
1.在本地创建版本库
终端定位到空文件夹后,初始化git仓库
git init
2.在github网页上创建新的库
根据网页上向导说明在本地执行两行代码
(把本地仓库推到远程新建到仓库上)
远程仓库和本地仓库关联起来
git remote add origin git@github.com:LittleVolcano/learngit.git
push必须有commit才可以,所以第一次push之前(如果仓库文件夹是空的话)要先放上点东西。
git push -u origin master
命令为:git push < remote > < branch >
-u参数指定远程的默认主机。
本段意思:将本地的master分支推送到origin主机,同时指定origin为默认主机。以后用就可以不加任何参数直接git push
了。
拉下来已经存在的远程库
git clone git@XXX.git //从远程仓库clone下来代码
git submodule update --init --recursive //把子模块也拉下来
//以上两句可以用一句 git clone git@XXX.git --recursive 替代
3.使用,提交
工作区(新增加的文件会是未追踪状态)-----add----->暂存区-------commit--------->干净
git status
//查看状态,有哪些文件更改了(新增未追踪、修改)
git diff
//工作区(add之前)和暂存区(已经add的)的详细差别。
git commit
会先新建一个tree对象,该对象包含指向每个文件快照的指针。然后新建一个commit对象,该对象含有指向tree的指针和作者信息等。这样就能通过一次次的commit查到当时版本的快照。
git add learngit.txt
git add abc.txt
git commit -m "这里写注释"
git push origin master//不用-u了
4.回退
git log
//可以查看最近几次的修改的版本号,作者,时间,提交名称
git reflog
//可以查看所有提交的版本号
git reset --hard HEAD^
//当前用HEAD表示,前一个用HEAD^表示。回退到上一个版本。
git reset --hard dafoajdfoaj
//跳转到指定版本号的版本。
5.从远程克隆到本地
//远程的库的右上角有clone or download,点击会出现库的地址。
克隆到本地:
git clone https://github.com/LittleVolcano/gitskills.git
要拷贝别人的库,先在github上fork别人的库到自己到github仓库,再用上边步骤同步到本地库
6.分支
git branch
查看有哪些分支,当前所在分支前会标注星号。查找所有分支(本地存下的)git branch -a
查找分支git branch -a | grep 分支名
本地创建分支并切换过去 git checkout -b 分支名
push新分支到远程git仓库git push -u origin 仓库名
git checkout 分支名
切换分支
git merge 分支B
当前分支和B分支合并
git branch -d 分支名
删除分支
git push origin -delete referVerify
删除远程分支
从远程同步git fetch origin
git branch -D referVerify
一次简单的版本控制例子
先修改了某些文件
git status //会用红色显示修改了没add的文件,目前本地分支和远程是同步的
git add .
git diff //哪个文件哪里修改了会被详细列出
git status //add后会用绿色显示暂存了没提交的文件,目前本地分支和远程是同步的
git commit -m "本次提交的名称" //在本地提交
git status //此时会提示我(本地)的分支比远程的领先1次commit
git push //推送的远程仓库
参考中文资料
《progit》:https://git-scm.com/book/zh/v2/