本文参考廖雪峰Git教程
git init //初始化git
git add ./filename //提交到版本库放入暂存
git add * //效果同 git add all
git add -A //暂存所有的文件,包括新增加的、修改的和删除的文件。
git add . //暂存新增加的和修改的文件,不包括已删除的文件。即当前目录下所有文件。
git add -u //暂存修改的和删除的文件,不包括新增加的文件。
git add -i //交互式添加文件到暂存区。
git add -p //暂存文件的一部分。
git commit -m “备注” //提交到版本库
git commit -am “本次提交说明” //自动把暂存所有跟踪过的文件一并提交,从而跳过 git add 步骤,参数 -am 也可写成 -a -m。
git commit --amend //重新提交
git status //查看文件状态
git status -s 或 git status --short //状态简览
git diff //查看工作区中的修改。
git diff --staged 或 git diff --cached //查看暂存区中的修改。
git diff //比较两次 commit 之间的差异。
git diff //在两个 branch 之间比较。
git diff filename //查看指定文件具体修改了哪些内容
git diff HEAD – filename //命令可以查看工作区和版本库里面最新版本的区别
git show //查看最后一个 commit 的修改。
git show HEAD~3 //查看倒数第四个 commit 的修改
git remote add origin “远程仓库地址” //关联远端仓库
git remote rm origin //删除远端仓库关联
git remote -v //查看已关联远端库
git push -u origin master //提交到远端仓库 第一次以后用:git push origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数, Git不但会把本地的master分支内容推送的远程新的master分支, 还会把本地的master分支和远程的master分支关联起来, 在以后的推送或者拉取时就可以简化命令。git reset --hard HEAD^ //回退版本 HEAD HEAD^ HEAD^^ HEAD~100
git reset --hard 版本号(十六进制一大串的前五位)
git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区
HEAD严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。git log //查看记录 (按q退出)
git reflog//记录每次命令查找id
git log -pretty=oneline 一大串类似1094adb…的是commit id(版本号)
git log --oneline
git branch //查看分支
git branch -a 查看远程分支和本地分支
git branch -v 查看各个分支最后一个提交信息
git branch --merged 查看哪些分支已经合并入当前分支
git branch //创建分支
git checkout //切换分支
git checkout -b //创建+切换分支
git merge //合并某分支到当前分支
git branch -d //删除(本地)分支
git branch -D 强行本地删除
git push origin --delete 分支名(remotes/origin/分支名):删除远程分支
git log --graph命令可以看到分支合并图。
git删除远程分支
1 $ git branch -r //查看远程库分支 2 $ git branch -r -d origin/branchname //删除 3 $ git push origin :branchname //推送 :branchName 之间没有空格当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
$ git merge --no-ff -m “merge with no-ff” dev
合并时,如果可以,默认会选择 ‘fast forward’ 模式,但会丢失分支信息 –no-ff参数,表示禁用Fast forward
因本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
分支策略
master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;干活都在dev分支上,dev分支是不稳定的2.4 Bug 分支 每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。 Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作: $ git stash Saved working directory and index state WIP on dev: f52c633 add merge 用git stash list命令查看工作现场存在哪 恢复方法: 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop stash@{0}来删除;stash list就查看不到 另一种方式是用git stash pop,恢复的同时把stash内容也删了 可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:$ git stash apply stash@{0}
2.5 Feature 分支 开发一个新feature,最好新建一个分支 丢弃一个没有被合并过的分支,可以通过git branch -D 强行本地删除
2.6 多人协作 要查看远程库的信息,用git remote 用git remote -v显示更详细的信息 推送分支 git push origin master 推送分支,就是把该分支上的所有本地提交推送到远程库 master(主分支)与dev(开发分支)需要推送,bug与feature分支不需要推送 抓取分支 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交; 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致; 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name; 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
2.7 Rebase 特点:把分叉的提交历史“整理”成一条直线,看上去更直观。 缺点是本地的分叉提交已经被修改过了 –pretty — 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式) –abbrev-commit — 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 $ git log --graph --pretty=oneline --abbrev-commit //找到历史提交的commit id 效果* 582d922 (HEAD -> master) add author * 8875536 add comment * d1be385 (origin/master) init hello * e5e69f1 Merge branch ‘dev’ |\ | * 57c53ab (origin/dev, dev) fix env conflict | |\ | | * 7a5e5dd add env | * | 7bd91f1 add new env
Tag Manage 3.1 Creating Tag $ git tag v1.0 //可以打一个名为 v1.0的新标签 $ git tag //查看所有标签 $ git tag v0.9 f52c633 //为 commit id 为 f52c633 的提交版本创建标签v0.9 $ git log --graph --pretty=oneline --abbrev-commit //找到历史提交的commit id $ git show 查看标签信息 $ git tag -a v0.1 -m “version 0.1 released” 1094adb //-a指定标签名,-m指定说明文字3.2 Operating Tag 命令git push origin 可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d 可以删除一个本地标签;
命令git push origin :refs/tags/可以删除一个远程标签。
配置别名 $ git config --global alias.st status //告诉Git,以后st就表示status –global参数是全局参数,对当前用户生效所有Git仓库下都有用。位于用户主目录下的一个隐藏文件.gitconfig 不加–global 与–system,只对当前仓库起作用。位于.git/config文件中 –system ,将会对所有的用户生效 位于./etc/gitconfig 删除:别名就在[alias]后面,要删除别名,直接把对应的行删掉即可 $ cat ~/.gitconfig //查看已经配置的所有别名
多人协作详解 github 创建 repository → settings → collaborators → 输入要加入的 partner 的用户名 → add collaborator 系统发送邮件至 partner 邮箱,对方接受后即可 同理,可被对方 add collaborator 从对方pull & push branch 在本地新建文件夹(建议与要 pull 的 repository 名一致) 进入文件夹,右键 Git Bash Here 初始化 git init 关联远程库 git remote add origin git@github.com:用户名/库名 查看远程库 git remote -v 拉取master分支 git pull origin master 创建dev分支 git checkout -b dev 修改分支并提交 git add . git commit -m"dedcribe" 推到远程库 git push origin dev