作为一个打算跟代码耗一辈子的有志青年,怎能不学习git
-
** 下面介绍下
git
常用命令 **-
git init
初始化git 文件 -
git add file
添加文件到暂存区(index
区域) -
git add -A
stages All -
git add .
stages new and modified, without deleted -
git add -u
stages modified and deleted, without new -
git commit
提交到版本库 -
git commit -a -m "提交说明"
最常用的方法(可以省去 add到暂存区这一步 ) -
git status
查看工作区所有文件状态
-
-
- 文件名为红色提示表示文件只存在于工作区,没有进入暂存区 需要 add 该文件 到暂存区
- 文件名为绿色绿色提示表示文件已经存在暂存区 commit 后该文件进入版本库
-
删除文件
- 工作区是clean状态 手动删除
- 手动删除文件之后
文件在本地被删除,但是还存在git 版本中
- 恢复文件:git checkout -- <file>
把暂存区的文件恢复到本地
- > - 手动删除之后,想要在暂存区也删除git rm file
- 这时候想恢复文件 ** 前提是代码版本库中有该文件的存档 **
- 恢复暂存区文件:git reset HEAD <file>
- 恢复本地文件:git checkout -- file
- 手动删除文件之后
- 工作区是clean状态 手动删除
git rm <file>
用git删除文件(非手动删除) 本地文件和暂存区(index)都会被删除git rm <file> --cached
只删除暂存区git index中的记录,不会删除本地代码git rm <file> -f
强制删除文件,** 凡是带有 -f 的命令都要慎重,除非找你很清楚自己在做什么 **git diff
当前工作目录和上次提交与本地索引(index)间的差异。git diff --cached
当前的索引(index)和上次提交间的差异 这些内容在不带"-a"参数运行 "git commit"命令时就会被提交git diff HEAD
工作目录与上次提交时之间的所有差别,这条命令所显示的 内容都会在执行"git commit -a"命令时被提交-
重命名
-
git mv <file1> <file2>
把file1改名为file2
相当于
-mv file1 file2
-git rm file1
-gir add file2
-
-
查看提交历史
-
git log
打印所有提交信息, SHA-1校验, 作者名字, 电子邮件, 提交时间 , 提交说明 -
git log -p
显示每次提交的内容差异 -
git log -n
显示最近n次历史 -
git log --stat
简要显示增改行数统计
-
-
git 撤销
git commit --amend
- 修改上次commit内容 http://www.cnblogs.com/irocker/p/git-commit--amend.html
- 暂存区有内容,则把暂存区内容加入到上次commit版本中,git head中 会删除上次commit版本,把这次commit --amend中的内容作为新版本加入head中
- 暂存区无内容,则有机会从新编辑提交说明
-
git 撤销本地修改(还未提交到本地代码库)
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态
-
git本地分支管理
git branch
查看所有分支git branch name
创建新分支 名字为namegit checkout
分支name 切换分支 (在存在多个分支的情况下)-
git checkout -b distribution
切换到新建分支distribution(同时创建分支distribution)- 相当于:
git branch distribution
加上git checkout distribution
- 相当于:
git merge [branch-name]
把branch-name分支合并到当前分支(如果当前分支已经包含有[branch-name]中的所有内容则 提示 Already up-to-date 意识是没有必要合并)git branch -d [branch-name]
删除分支branch-namegit branch -v
所有分支最后一次提交信息git branch --merge
查看已合并分支git branch --no-merge
查看未合并分支git branch -d [branch-name]
删除分支(前提是分支已经合并,未合并的分支会删除失败)git branch -D [branch-name]
强制删除分支 (哪怕没有合并,照样删除)
-
git 远程仓库管理
-
给本地git 添加远程仓库
-
git remote add origin url
添加分支名为origin的远程分支
-
-
推送到该远程仓库
-
git push -u origin master
以origin为默认主机,后面就可以不添加任何参数 git push
-
git remote
列出所有远程分支的名字git remote -v
列出所有远程分支的详细信息git remote add [shortname] [url]
添加远程分支,并给该远程分支起别名git fetch [remote-name]
拉取所有远程分支,但是并不合并本地分支git pull
拉取远程分支,并合并git remote show [remote-name]
打印远程分支详细信息git remote rename name1 name2
重命名远程分支name1 改名为name2git remote rm name
删除远程分支 name-
git checkout -b 【分支名】 [远程名]/【分支名】
新建分支并切换到该分支 (该分支是对[远程名]/[分支名]的复制)- 相当于
git checkout --track
[远程名]/[分支名]
- 相当于
跟踪分支:从远程分支检出的本地分支,是一种和远程分支有着直接李恩熙的本地分支, 一个本地分支只能和一个远程分关联。
-
推送到远程分支
git push [远程名] [本地分支]:[远程分支]
-
删除远程分支
-
git push [远程名] :[远程分支]
(省略了本地分支,意思是把一个空的分支来替换远程分支,也就是删除)
-
-
git rebase,顾名思义,就是重新定义(re)起点(base)的作用 http://blog.chinaunix.net/uid-27714502-id-3436696.html
一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。
- `git rebase [branch-name]` 衍合结果在原分支 相当于 git rebase [branch- name] [self-branch-name]
- `git rebase [branch-name1] [branch-name2]` 切换在 [branch-name2]中,并且commit 顺序是 先name1 然后是name2 (和时间前后无关)
-
git rebase --onto master [branch-animal] [branch-dog]
衍合animal 和 dog 共同祖先后面的变化 和 master 衍合
- git 可以直接提交单个文件。
当修改了多个文件, 这时候你可以挑出其中的某几个文件 add 到暂存区, 然后commit, 不影响其他工作区的文件。
- 本地创建好了项目, 要关联远程仓库
git remote add origin https://yourUrl
git push -u origin master
- git 回退到历史版本 reset 和 checkout
回退上个版本 reset
-git reset --hard HEAD^
(本地代码也会回退)
- 整个项目回退历史版本
git reset [历史版本] --参数
参数:
- soft : 只有HEAD 回到历史版本
- mixed: index 和 HEAD 回到历史版本
- hard: working index HEAD 全部回到历史版本
-
某个文件回退到历史版本 reset
git reset [历史版本] 文件名字
这样的好处:不影响本地代码, reset 后 直接执行 commit 这个文件就回到了历史版本。
HEAD 指向当前分支的 commit
checkout
checkout是会修改HEAD的指向,变更Index区域里的内容,修改Working Directory里的内容。
这看上去很像reset --hard,但和reset --hard相比有两个重要的差别
- reset会把working directory里的所有内容都更新掉
checkout不会去修改你在Working Directory里修改过的文件 - reset把branch移动到HEAD指向的地方
checkout则把HEAD移动到另一个分支
- 当终端程序执行到最后一行只有一个冒号(:)时,说明程序没执行完,点击enter 键,继续执行
- 终端遇到 end 提示,按q可以退出该进程