git设置
//设置用户名和邮箱,每次的commit都会使用这些信息
git config --global user.name "liuzxc"
git config --global user.email lxq_102172@163.com
//当git需要你手动输入信息时,你可以设置需要打开的编辑器,默认是vim
git config --global core.editor "open -a 'Sublime Text 2'"
//检查你的设置
➜ git config --list
color.ui=true
user.name=liuzxc
user.email=lxq_102172@163.com
core.repositoryformatversion=0
core.filemode=true
remote.origin.url=.....
remote.origin.fetch=.....

每个github账户都会有‘贡献图表’,如果你的commit没有出现在图表上,说明你github账户的邮箱和当前repo配置的邮箱不一致
git工作流
你的本地仓库由 git 维护的三棵“树”组成。第一个是你的工作目录,它持有实际文件;第二个是暂存区(Index),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。

引用自git简明指南
git基础
git init //把当前文件夹初始化为一个git repo
git clone <URL> //获取一个已经存在的git repo的拷贝
git status //查看当前git repo的状态
git status -s //简化输出

git add <file> //添加文件到暂存区
git diff: 显示您的工作目录和index之间的差异.
git diff –cached: 显示index和最近的commit之间的差异(即 git add 后的差异).
git diff HEAD: 显示您的工作目录和最新的commit之间的差异.
git commit //提交
git commit -am "xxxxxxxxx" //跳过暂存区直接提交
在过去很长的一段时间里,我一直错误的以为 git commit -am 是 git add + git commit -m 的简写,虽然效果是一样的,但别后的实现却是不同的, git add是先把change加载到暂存区,然后通过commit提交,而git commit -am 是跳过了暂存区,直接提交。
每一次commit都会为创建一个项目的快照,方便回滚或比较。
git log 查看提交历史
git log是我使用最频繁的git命令之一,尤其是在团队协作的项目中,每天都会有大量的commit,如果你想查看自己的或同事的commit内容,git log命令可以很好的帮助你。
git log //按时间顺序逆序列出所有的commit
git log -p //输出commit的详细信息
git log -p -n //查看最近的n条commit
git log --author=liuzxc //查看作者是'liuzxc'的提交记录
git log --since='2014-12-01' //查看2014年12月1号以来的提交记录
git log --since=2.weeks //查看最近两周的提交记录
git log --pretty=oneline //一行显示历史提交记录
git commit
//修改已经提交的注释
git commit --amend
git reset
//如果错误的把某些文件放进暂存区,可以使用以下命令取消
git reset HEAD <file>
//丢弃本地工作目录的改动,此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件
git checkout -- <file>
git remote
git remote -v //列出目前存在的远程分支
git fetch
git fetch //从远程分支获取最新版本到本地,默认是master分支
git fetch 和 git pull的区别:
- git fetch: 从远端分支拉取但不合并
- git pull: 从远端分支拉去并自动合并,相当于 git fetch + git merge
git merge
git branch --merged //查看哪些分支已被并入当前分支
git branch --no-merged //查看尚未合并的分支
git tag
git tag //列出当前所有的tag
git tag -a v1.2.4 -m "xxxxxx" //-a:创建tag; -m:添加注释
git push origin [tagname] //标签推送类似于分支推送
git push origin --tags //一次性推送所有本地新增标签到远端
git show <tag_name> // 现实tag的详细信息
git push并不会将tag随同数据一起push到远端服务器
Git 分支
//新建一个分支并切换到新建分支
git checkout -b new_branch
等同于
git branch new_branch
git checkout new_branch
//删除本地分支
git branch -d new_branch
//如果分支中包含未合并的工作内容,删除分支会导致数据丢失,因此-d会报错,
//如果你确实要删除分支的改动,可以使用-D强制删除
git branch -D new_branch
//删除远端分支
git push origin :<branch_name>
//查看哪些分支已被并入当前分支,如果你要清理本地无用的分支,该命令非常有用。
git branch --merge
//查看尚未合并的分支
git branch --no-merged
//清理远端已经被删除的分支
git remote prune origin or git fetch origin --prune
撤销错误的提交
在日常的工作中,有时候可能会出现这样的失误:将错误的内容提交到了远程仓库,那么应该如何取消这次错误的提交呢?
git reset --hard <commit_id> //回退到这个commit_id
git reset --hard HEAD //取消当前的commit
git reset --hard HEAD^ //取消上一次的commit
git reset --hard HEAD~2 //取消最近两次的提交
//then:
git push origin HEAD --force //强制提交到远程仓库
撤销某次提交的其中的某个文件
如果某次commit已经push到远端仓库,但是发现某些文件不应该被提交,要如何去撤销这一个文件而不影响整个提交呢?
git log -p path/to/file #首先查找文件的提交历史
git checkout <commit> path/to/file #找到需要回退到的commit id
git commit #然后commit就可以了
如何把一个已经存在的 new project 添加到 github
- 在 github 创建一个新的 repo;
git init
(初始化 new project)git add .
(添加所有的本地文件到 local repo)git commit -m "first commit"
(提交文件到 local repo)git remote add origin remote_repository_url
(设置remote url,告诉你本地的内容应该被 push 到哪里)git push origin master
(把本地内容推送到远端)
.gitignore 文件
有些时候我们需要忽略本地仓库中的一些文件或目录,该如何去做呢?
touch .gitignore
#创建 .gitignore 文件- 选择需要忽略的文件或目录
- *.pyc #忽略以 .pyc 结尾的文件
- bin/ #忽略 bin 目录
如果需要忽略的文件或目录已经被提交到远端仓库该怎么办?
从暂存区(index)中删除需要忽略的文件或目录
git rm --cached <file>
#从暂存区中删除某一个文件git rm --cached -r <directory>
#删除目录需要加 -r
然后添加到 .gitignore 文件中重新 commit
git stash(储藏你的工作)
想象一下这样一种场景:你正在一个分支上工作,更改了一些代码,现在你需要切换到别的分支工作,但是当前的 代码比并不想 commit,那该怎么办呢?
git stash
可以帮助你解决这个问题,它会储存你当前的变更,然后你当前的分支就会变的干净,你可以方便的
切换到其他的分支。
git stash
: 储藏当前的变更git stash list
: 查看现有的储藏git stash apply
: 应用你当前的储藏