Gitgit
demo
环境: Ubuntu github
sudo apt-get install git
$ mkdir learngit $ cd learngit $ git init
初始化空的 Git 版本库于 /home/administrator/文档/learngit/.git/shell
空仓库建好了app
将文本文件添加至 版本库ssh
$ git add readme.txt
--能够屡次添加/一次添加多个文件(空格分割)fetch
用命令git commit告诉Git,把文件提交到仓库:ui
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme filethis
1 file changed, 2 insertions(+)spa
create mode 100644 readme.txt命令行
-m后面输入的是本次提交的说明
$ git status 掌握仓库当前的状态 $ git diff readme.txt 查看区别
$ git log 显示从近到远的提交日志 $ git log --pretty=oneline 每一个日志显示为一行
# 用HEAD表示当前版本,上一个版本就是HEAD^
# 上上一个版本就是HEAD^^
# 往上100个版本,HEAD~100
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
# 回退后最新的版本在 git log中不能在看见
# 能够在原命令行窗口下找到须要的版本号,复制前面几位
$ git reset --hard 664d1c0
HEAD 如今位于 664d1c0 append GPL
$ git reflog 记录每一次命令
25300b3 HEAD@{0}: reset: moving to HEAD^
664d1c0 HEAD@{1}: reset: moving to 664d1c040bc
25300b3 HEAD@{2}: reset: moving to HEAD^
664d1c0 HEAD@{3}: commit: append GPL
25300b3 HEAD@{4}: commit: add distributed
5eaef37 HEAD@{5}: commit: This is demo
0412150 HEAD@{6}: commit (initial): wrote a readme file
add 前
$ git checkout -- readme.txt
add 后
$ git reset HEAD readme.txt 将暂存区的内容回退到工做区
commit 后 推送远程库前 回退
$ git reset --hard HEAD^
工做区删除->暂存区删除->版本库删除
$ rm test.txt $ git rm test.txt $ git commit -m "remove test.txt"
建立SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"
在用户主目录里找到.ssh目录 隐藏着的,经过
$ ls --all
查看所有文件能够看到
id_rsa是私钥,不能泄露出去,
id_rsa.pub是公钥,能够放心地告诉任何人。
登录GitHub,打开“Account settings”,“SSH Keys”页面:
点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
登录GitHub,而后,在右上角找到“Create a new repo”按钮,建立一个新的仓库:
在Repository name填入 learngit,其余保持默认设置,点击“Create repository”按钮,就成功地建立了一个新的Git仓库:
把本地仓库的内容推送到GitHub仓库。
git remote add origin git@github.com:sidianshui/learngit.git
添加后,远程库的名字就是origin,这是Git默认的叫法,也能够改为别的,可是origin这个名字一看就知道是远程库。
把本地库的全部内容推送到远程库上:
$ git push -u origin master
关联后,第一次推送master分支的全部内容;
只要本地做了提交,就能够经过命令:
$ git push origin master
先建立远程库,而后,从远程库克隆
右上角“Create a new repo”按钮,
名字叫gitskills
勾选 Initialize this repository with a README
自动为咱们建立一个README.md文件
$ git clone git@github.com:sidiansh/gitskills.git
进入gitskills目录看看,已经有README.md文件
查看分支:git branch
建立分支:git branch <name>
切换分支:git checkout <name>
建立+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
当Git没法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令能够看到分支合并图。
fast forward合并就看不出来曾经作过合并。
禁用Fast forward模式
准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev
本次合并要建立一个新的commit,因此加上-m参数,把commit描述写进去。
保存现场
$ git stash
修复 BUG合并后
查看已有现场
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
恢复现场
$ git stash apply 恢复,可是恢复后,stash内容并不删除, $ git stash pop,恢复的同时把stash内容也删了:
删除现场
$ git stash drop
屡次stash
先用git stash list查看
$ git stash apply stash@{0}
每添加一个新功能,最好新建一个feature分支
未合并,强行删除:
$ git branch -D feature-vulcan
查看远程库的信息
$ git remote
origin
$ git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
本地推送分支,使用
git push origin branch-name
推送失败
先用git pull抓取远程的新提交
若是git pull提示“no tracking information”,则说明本地分支和远程分支的连接关系没有建立,
创建本地分支和远程分支的关联
git branch --set-upstream branch-name origin/branch-name
在本地建立和远程分支对应的分支
git checkout -b branch-name origin/branch-name
$ git tag <name>
查看全部标签: 标签按字母排序
$ git tag
对历史提交建立标签
查找须要的 commit id
$ git log --pretty=oneline --abbrev-commit
建立标签
$ git tag v0.9 6224937
查看标签信息
$ git show <tagname>
建立带有说明的标签
: 用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164
能够用PGP签名标签;
git tag -s <tagname> -m "blablabla..."
删除
$ git tag -d v0.1
推送标签到远程
$ git push origin <tagname>
一次性推送所有还没有推送到远程的本地标签:
$ git push origin --tags
删除远程标签
先本地删除
在远程删除
$ git push origin :refs/tags/<tagname>
Git工做区的根目录下建立一个特殊的.gitignore文件
把要忽略的文件名填进去,Git就会自动忽略这些文件。
全部配置文件能够直接在线浏览:
https://github.com/github/gitignore
ex:
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
st就表示status:
$ git config --global alias.st status
--global参数是全局参数,也就是这些命令在这台电脑的全部Git仓库下都有用。
$ 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"
--global是针对当前用户起做用的,若是不加,那只针对当前的仓库起做用。
每一个仓库的Git配置文件都放在.git/config文件中:
$ cat .git/config
别名就在[alias]后面,要删除别名,直接把对应的行删掉便可。
而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:
$ cat .gitconfig