借鉴:廖雪峰大神的git教程
易百教程:http://www.yiibai.com/git/git_pull.html(很不错的网站)
http://blog.youkuaiyun.com/baidu_31657889/article/details/51896433
Eclipse Egit 使用教程 https://my.oschina.net/doloop/blog/221800#_Toc315382088
https://github.com/geeeeeeeeek/git-recipes
git 命令
<file>: 表示文件名 如:Test.java *.java .(所有文件)
git-bash 等于是一个unix shell 类似于windows 的cmd
pwd 查看当前所在路径
dir 查看当前路径下所有文件
mkdir testRepository 创建一个文件夹 testRepository
ls -ah 查看隐藏文件
touch <file> 创建文件
=============================================================================================
设置提交时显示的 名称和邮箱
git config --global user.name "tom"
git config --global user.email tom@qq.com
git config --list 命令来列出所有 Git 当时能找到的配置
git init 把当前目录初始化为本地库
git clone <url> 克隆远程库到本地 自动将其添加为远程仓库并默认以 “origin” 为简写
提交文件:
git add <file> 将“新建/修改"的文件添加到暂存区
git add . 将工作区未提交的文件全部添加到暂存区 .(*也可以) 代表所有文件
git commit -m "commit info" -m后面输入的是本次提交的说明
git commit -a -m "commit info" -a 可以省略git add命令, 自动提交已追踪的文件
git commit --amend 补充漏提交的文件
检查状态:
git status 检查状态 是否存在未提交的文件
git status -s 同上, 提示更加简洁
git diff 工作区和暂存区的差异(工作区<-->xxx)
git diff <file> 比较工作区和暂存区的指定文件的差异
git diff HEAD|HEAD^|HEAD~|哈希索引值 比较版本差异
git diff HEAD HEAD~2 -- <file> 显示HEAD指向的历史提交和前2提交中文件的差异
git diff head 工作区 vs 版本库
git diff --cached 暂存区 vs 版本库 (--staged效果一样)
git ls-files --stage 暂存区的文件
git show 查看某次历史提交信息的完整信息
git log --pretty=oneline 查看提交日志 简化输出信息(能够看到提交说明)
git log --oneline 以简洁的一行显示,包含简洁哈希索引值
git shortlog 查看某人的提交
git reflog 查看每次命令所操作的 commit id
git log -p -2 前两次提交的差异
重置: git reset --hard 撤销到某次提交 git revert 撤销某次提交
git reset HEAD 改变指针, 暂存区文件回退到工作区(验证命令 git diff --cached)
git reset HEAD <file> 把文件从暂存区撤销
git reset --hard HEAD 清空暂存区的文件
git reset --hard HEAD^ 一个^代表回到上一个版本
git reset --hard HEAD~10 ~10代表后退10个版本
git reset --hard 2ff22 重置指定某个版本 版本号可以只写前几位 不写完整
(工作区中未提交暂的文件依旧存在, 在暂存区, 但未commit的文件会丢失)
git reset --soft 回退到add状态, 需要commit
git reset --mixed 回到add之前的状态, 需要先add再commit
git rm 移除文件并移除跟踪(不然需要add删除的文件)
git rm --cached <file> 从暂存区中移除(文件任然存在), 不会被提交
git mv <file> <newFile> 改名
分支:
git checkout xxx 切换分支
git checkout -b xxx -b 创建并切换分支
git checkout -b xxx origin/xxx 从远端获取一个分支 在本地创建和远程分支对应的分支
git checkout -- <file> 取消工作区中文件的修改
git branch -a 查看当前所有分支
git branch xxx 创建分支
git branch -d xxx 删除本地xxx分支
(有命令可以删未被追踪的远端分支)
git push origin --delete xxx 删除远端分支 xxx
git branch --set-upstream-to=origin/master 关联远端master分支
git branch --set-upstream branch_name origin/branch_name 建立本地分支和远程分支的关联
分支合并:
git merge xxx 合并xxx分支到当前分支 默认的快速合并将看不到分支历史 使用 --no-ff 禁用Fast forward
git merge –no-ff -m “注释” dev 禁用 fast forward (会强制覆盖别人的代码,不推荐)
分支暂存:
git stash 存储当前分支修改
git stash list 查看储存历史
git stash apply 回退最后一次存储
git stash drop 删除最后的存储
git stash pop 回退的同时并删除存储
多人协作:
git remote 查看远程库信息
git remote -v 显示更详细的信息
git remote add <shortName> <url> 添加一个新的远程 Git 仓库
git remote show origin 查看远程仓库origin的更多信息
git remote rename <name> <shortName> 修改一个远程仓库的简写名
拉取:
git pull 拉取分支并合并,如果有冲突,要先处理冲突
(git clone 自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或不管是什么名字的默认分支))
git fetch [remote-name] 数据拉取到本地仓库(不会自动合并或修改当前的工作)
推送:
git push origin 将当前分支推送到origin主机的对应分支
git push origin xxx 推送到远端xxx分支
git push -f 本地库HEAD指向的版本比远程库的要旧, 强制推
标签:
tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
git tag <name>
git tag <name> <commit id>
git tag -a <tagname> -m "备注说明" <commit id>
标签不是按时间顺序列出,而是按字母排序的。
git show <tagname>查看标签信息:
操作标签:
git tag -d <tagname> 删除标签
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
git tag -d <tagname> 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
git push origin :refs/tags/<tagname> 然后,从远程删除。删除命令也是push,但是格式如下:
rebase:
git rebase -i HEAD~3 合并commit记录
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
.gitignore文件(略)
git add -f <file name> 强制添加到git 被忽略的文件无法添加时使用强制添加
git check-ignore -v <file name> 查看哪一条忽略规则 忽略了文件
场景:
一:先有本地库,后有远程库
git remote add origin https://git.oschina.net/zx1323/GitTest.git 关联远程库,成功后可以在.git./config 文件内查看
git remote remove origin 移除关联的远端库地址
关联后,使用命令
git push -u origin master 第一次推送master分支的所有内容;
git push origin master 将本地master分支的最新修改推送到远端库
二:克隆远程库到本地
git clone git@git.oschina.net:zx1323/TestUtils.git 克隆远程库到本地
=============================================================================================
免密登录,添加公钥到git仓库
ssh-keygen -t rsa -C "youremail@example.com" 构建ssh Key 3-4下回车键
根据回返回路径 cat查看密钥 id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
ctrl+insert复制密钥 ssh-rsa...@xx.com http://git.oschina.net/keys 添加公钥地址到码云 官方的教程:http://git.mydoc.io/?t=154712
ssh -T git@git.oschina.net 测试公钥是否添加到oschina
=============================================================================================
因此:多人协作工作模式一般是这样的:
- 首先,可以用git push origin branch_name推送自己的修改.
- 如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
- 如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch_name推送。
=============================================================================================
配置别名
git config --global alias.st status 设置命令简写 查看状态
git config --global alias.unstage 'reset HEAD' 暂存区修改撤销 回到上一个版本
git config --global alias.co checkout 切换分支 或工作取放弃修改
git config --global alias.ci commit 提交
git config --global alias.br branch 查看分支
git confit --global alias.last 'log -1' 最后一条日志
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的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
每个仓库的Git配置文件都放在.git/config文件中:
别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。
=============================================================================================
eclipse 中切换分支
Team-Switch to-New branch-select 选择所需分支 完成即可