常用git 命令
绑定用户名 $ git config --global user.name "Your Name"
绑定邮箱 $ git config --global user.email "email@example.com"
让Git 显示颜色 $ git config --global color.ui true
已经配置的别名
$ git config --global alias.st status
$ git config --global alias.ck checkout
$ git config --global alias.cm commit
$ git config --global alias.br branch
$ git config --global alias.unstage 'reset HEAD'
$ git config --global alias.lg "log --color --graph --pretty=format:
'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)
%C(bold blue)<%an>%Creset' --abbrev-commit"
$ git config --global alias.lgg 'log --graph'
版本库操作
把这个目录变成Git可以管理的仓库 $ git init
把文件添加到仓库 $ git add readme.txt
把文件提交到仓库 $ git cm -m "wrote a readme file" ($ git commit -m "wrote a readme file")
查看仓库当前的状态 $ git st ($ git status)
查看具体修改 $ git diff readme.txt
查看从最近到最远的提交日志 $ git log
查看简单提交日志 $ git log --pretty=oneline
退到上一个版本(HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,
当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100)
$ git reset --hard HEAD^
退回指定的版本 $ git reset --hard 1094a(版本号前几位)
把暂存区的修改回退到工作区 $ git unstage readme.txt ($ git reset HEAD readme.txt)
查看每一次版本命令 $ git reflog
禁用自动转换 $ git config --global core.autocrlf false
比较工作区文件与暂存区文件(上次git add 的内容)区别
$ git diff
比较暂存区的文件与仓库分支里(上次git commit 后的内容)的区别
$ git diff --cached
丢弃工作区的修改 $ git ck -- readme.txt ($ git checkout -- readme.txt)
从版本库中删除该文件 $ git rm test.txt
远程库操作
本地关联远程库 $ git remote add origin git@github.com:monicaaish/monica.git
克隆一个本地库 $ git clone git@github.com:michaelliao/gitskills.git
将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数
使用git push了 $ git push -u origin master
(加了参数-u后,以后即可直接用git push 代替git push origin master)
创建与合并分支
查看分支 $ git br ($ git branch)
创建分支 $ git br dev
切换分支 $ git checkout dev
创建+切换分支 $ git checkout -b dev
合并dev分支到当前分支 $ git merge dev
禁用Fast forword $ git merge --no-ff dev
删除分支 $ git br -d dev
解决冲突
查看分支合并图产品 $ git lgg ($ git log --graph)
查看分支合并情况 $ git lg ($ git log --graph --pretty=oneline --abbrev-commit)
错误分支
把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash
查看存储的工作现场列表 $ git stash list
恢复工作现场:
1.恢复后,藏匿内容并不删除 $ git stash apply
删除藏匿内容 $ git stash drop
2.恢复的同时藏匿内容也删除 $ git stash pop
恢复指定藏匿内容 $ git stash apply stash@{0}
强行删除分支 $ git br -D feature-vulcan
多人协作
查看远程库的信息 $ git remote
详细显示远程库的信息 $ git remote -v
Rebase
把本地未push的分叉提交历史整理成直线
$ git rebase
标签管理
创建新标签 $ git tag v1.0
查看所有标签 $ git tag
指定标签对应commit Id $ git tag v0.9 f52c633
查看标签信息 $ git show v0.9
创建带有说明的标签,-a指定标签名,-m指定说明文字
$ git tag -a v0.1 -m "version 0.1 released" 1094adb
删除标签 $ git tag -d v0.1
推送标签到远程 $ git push origin v1.0
推送全部尚未推送到远程的本地标签$ git push origin --tags
删除远程标签
1.先删除本地标签 $ git tag -d v0.9
2.从远程删除 $ git push origin :refs/tags/v0.9
模拟多人协作
另一台电脑抓取分支
1.克隆 $ git clone git@github.com:monicaaish/learngit.git
2.需要在dev分支开发,必须创建远程origin的dev分支到本地,创建本地dev分支
$ git checkout -b dev origin/dev
3.修改文件 添加提交 $ git add env.txt
4.提交文件 $ git commit -m "add env"
5.push到远程 $ git push origin dev
本地修改相同文件
1.修改文件 添加提交 $ git add env.txt
2.提交文件 $ git commit -m "add new env"
3.push到远程 $ git push origin dev
这个时候会报错: 推送失败,因为另一台电脑的最新提交和你试图推送的提交有冲突
To github.com:michaelliao/learngit.git
! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解决办法:先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
1.从origin/dev抓取最新提交 $ git pull (这时会报错,原因是没有指定本地dev分支与远程origin/dev分支的链接)
2.设置dev和origin/dev的链接 $ git br --set-upstream-to=origin/dev dev
3.从origin/dev抓取最新提交 $ git pull
4.git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交
$ git commit -m "fix env conflict"
5.push到远程 $ git push origin dev
多人协作的工作模式通常是这样:
首先,可以试图用git push origin <branch-name>推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,
用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
linux命令
查看当前目录列表 $ ll
创建文件夹 $ mkdir learngit
打开目录 $ cd learngit
显示当前目录 $ pwd
创建或打开文件,编辑文件 $ vim readme.txt
*在文件中编辑文本,按下 i 进入编辑,此时在窗体最底部会出现 -- 插入 --
*输入完毕后,完成输入,退出输入,按 ESC ,这个时候会发现底部的 -- 插入 --没有了
*保存编辑的文件,并且退出vim编辑 输入 :wq 命令,按回车键
*没有进行修改,不需要保存直接退出 ,输入 :q 命令
保存,不退出vi --------------------------------------------- :w
强制保存,不退出vi --------------------------------------- :w!
将修改另外保存到file中,但不退出vi(不常用)------ :w file
保存,并退出vi --------------------------------------------- :wq 或 :x
强制保存,并退出vi --------------------------------------- :wq!
不保存,并退出vi ------------------------------------------ :q
不保存,并强制退出vi ------------------------------------ :q!
放弃所有修改,从上次保存文件开始再编辑 ----------- :e!
查看文件的内容 $ cat readme.txt
删除文件 $ rm test.txt