文章目录
本文参考廖雪峰Git教程
一、常用命令
1. ADD AND COMMIT
-
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 //重新提交
2. DIFF AND SHOW
-
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 的修改
3. remote
-
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分支关联起来, 在以后的推送或者拉取时就可以简化命令。
4. reset & log
-
git reset --hard HEAD^ //回退版本 HEAD HEAD^ HEAD^^ HEAD~100
-
git reset --hard 版本号(十六进制一大串的前五位)
-
git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区
- HEAD严格来说不是指向提交,而是指向master
- master才是指向提交的,所以,HEAD指向的就是当前分支。
-
git log //查看记录 (按q退出)
-
git reflog//记录每次命令查找id
-
git log -pretty=oneline
一大串类似1094adb…的是commit id(版本号) -
git log --oneline
5. Others
- git rm filename //删除文件
- cat filename//查看文件内容
- VIM 模式中,修改完之后按esc键退出编辑状态,再按大写ZZ就可以保存退出vim编辑器
二、分支管理
6. 创建与merge(合并)分支
-
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 之间没有空格
7. 解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
8. 分支管理
-
$ 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