Linus Torvalds —— Just For Fun
HEAD头指针
1.获取帮助
- git help <verb>
- git <verb> --help
2.建立仓库
(工作平台)
- git init
- git add <文件名>( 跟踪该文件)(添加到暂存区)
- git commit -m“ ....”(添加到git仓库)
git commit 不加参数则直接打开vim编译与.gitignore格式相同,+'-m'则直接在命令行中输入提交信息
如果+ " -a"参数则可以跳过add 直接一步操作,跳过使用暂存区
如 git commit -a -m"跳过暂存区" - git push [远程仓库名] [远程分支]
3. git 别名
- 如 git config --global alias.ci commit ,这输入 git commit 时只需要 git ci
4.查看状态
- git status
- git diff
查看工作区与已暂存的文件的区别,更新了哪些,也就是修改之后还没有暂存起来的变化内容 - git log (-p查看不同,-num 查看最近几次 -3,-2)
- git reflog 来查看引用日志
- git remote show origin(查看origin仓库的更多信息,分支跟踪等信息)
- git show [commit id]--查看某次提交修改了什么
5. .gitignore
• 所有空行或者以 # 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式可以以(/)开头防止递归。
• 匹配模式可以以(/)结尾指定目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的
glob 模式
是指 shell 所使用的简化了的正则表达式。星号()匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9] 表示匹配所有 0 到 9 的数字)。使用两个星号() 表示匹配任意中间目录,比如a/**/z
可以匹配 a/z,a/b/z 或a/b/c/z
等。
6.撤销操作
-
use "git checkout -- <file>..." to discard changes in working
如文件readme
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:- 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
- 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
use "git reset HEAD <file>..." to unstage
对于上面的第二种,如果已经add到暂存区,可以先use "git reset HEAD <file>..." ,然后再git checkout -- <file>.使他完全撤销更改
版本回退
- 用git log / git reflog查看commit id
- git reset --hard [commit id] / git reset --hard [HEAD^] (一个^代表上一个提交)
7.删除文件
- git rm <file>
删除工作区和git仓库中的文件 - git rm --cached
只取消跟踪,本删除本地工作区文件
8.远程仓库
- git remote 列出远程服务器的简写 (-v详细)
- git remote add <shortname> <url>添加远程仓库
- git clone [url] [name] (可添加自定义仓库名) 克隆,在当前目录下建立一个文件夹
- git fetch [remote-name]抓取远程仓库的所有数据
如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。必须注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。当准备好时你必须手动将其合并入你的工作。 - git pull 会抓取并自动合并到当前分支
- git remote show origin(查看origin仓库的更多信息)
- git remote rename [原] [新] 远程仓库重命名
- git remote rm <name>远程仓库删除
git分支 (重点)
注意,git还有一个指针HEAD,指向当前分支的指针(也就是当前分支的别名)
-git branch <name> 创建分支
-git checkout <br name>切换分支 git checkout -b <>创建分支并切换到这个分支上
在你这么做之前,要留意你的工作目录和暂存区里那些还没有被提交的修改,它可能会和你即将检出的分支产生冲突从而阻止 Git 切换到该分支。最好的方法是,在你切换分支之前,保持好一个干净的状态。
- git merge <name > 将当前分支与name 分支合并(如果时直接上游将快进,不会用冲突)
- git branch -d <name>删除分支
master和hotfix直接合并,快进
master和iss53为和并提交
合并冲突
- git status 查看冲突文件及位置
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html
上面HEADB表示当前分支的文件内容,下面表示合并分支的内容
-
git mergetool
第一次使用要设置: git config merge.tool vimdiff 参见
这个命令使用图形化界面来合并冲突 - git add 标记合并的文件
- git commit 合并完成后输入
然后显示一个文件,可加如详细信息
分支管理
- git branch 显示当前所有分支
- git branch -v 查看分支及其最后一次提交
远程分支
(remote)/(branch) 形式命名
git clone是会自动建立远程分支指针,并以远程的master分支为基础建立本地master分支每次 git fetch d都会更新远程分支指针,本地只能切换到远程分支查看,而不能操作,也就是只要不和远程服务器连接,远程指针就不会移动,但是可以git checkout -b (remote)/(branch)这样以远程分支建立本地分支进行操作
拉取操作
git fetch <远程仓库名>拉取数据并移动远程仓库指针
当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。它只会获取数据然后让你自己合并。然而,有一个命令叫作 git pull 在大多数情况下它的含义是一个 git fetch 紧接着一个git merge 命令。-
git merge origin/serverfix 将这些工作合并到当前所在的分支
git push origin <本地分支的名字>
建立远程分支,还本地分支名字一样git push origin serverfix:serverfix,
它会做同样的事 - 相当于它说,“推送本地的 serverfix 分支,将其作为远程仓库的 serverfix 分支”可以通过这种格式来推送本地分支到一个命名不相同的远程分支。如果并不想让远程仓库上的分支叫做 serverfix,可以运行 git push origin serverfix:awesomebranch 来将本地的 serverfix 分支推送到远程仓库上的 awesomebranch 分支git checkout -b serverfix origin/serverfix
git checkout -b [branch] [remotename]/[branch]
fetch到新的远程分支后不会在本地自动建立分支,只会有一个<orign><branch>的只读的远程分支,可以执行改命令,会给你一个用于工作的本地分支,并且起点位于 origin/serverfix。git checkout --track origin/serverfix创建一个跟踪分支(git pull /git push自动识别,)
git checkout -b [branch] [remotename]/[branch] 跟踪分支
git remote show origin(可查看git push origin --delete [remote branch] 删除远程分支
最后,一个远程仓库版本回退的操作
- git push -f(加上-f 强制执行)
现在本地master分支上回退版本,然后加上 -f 强制推到远程仓库
参考:《Pro Git》