git 入门
本文只整理了一些常用命令,长期更新完善...
以下是一个未被版本控制的文件夹提交到远程仓库的一个简单过程
git init 初始化一个git仓库,会在该目录生成一个.git文件夹,以后所有文件的变化信息都保存在此目录
不会像svn在每个目录都生成.svn文件夹。
git add . 或 git add --all 将所有文件添加到git的索引中。
git add [路径/文件]... 添加文件夹或文件到git的索引中。
git commit -m '注释内容' 提交刚刚加入到git索引中的文件到本地仓库。
git remote add origin https://github.com/chenghuanhuan/test.git 添加该仓库的对应的远程主机。
upstream & downstream
git中存在upstream和downstream,简言之,当我们把仓库A中某分支x的代码push到仓库B分支y,此时仓库B的这个分支y就叫做A中x分支的upstream,而x则被称作y的downstream,这是一个相对关系,每一个本地分支都相对地可以有一个远程的upstream分支(注意这个upstream分支可以不同名,但通常我们都会使用同名分支作为upstream)。
初次提交本地分支,例如git push origin develop操作,并不会定义当前本地分支的upstream分支,我们可以通过git push --set-upstream origin develop,关联本地develop分支的upstream分支,另一个更为简洁的方式是初次push时,加入-u参数,例如git push -u origin develop,这个操作在push的同时会指定当前分支的upstream。
git push origin develop push代码到远程分支
git push -set-upstream origin develop 执行此命令后以后每次push都只需执行git push即可
git push -u origin develop 同上
此时一个本地文件完整的上传到git服务器了。
push.default参数设置
git config --global push.default [simple/matching/nothing/current/upstream]
- nothing - push操作无效,除非显式指定远程分支,例如git push origin develop(我觉得。。。可以给那些不愿学git的同事配上此项)。
- current - push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支。
- upstream - push当前分支到它的upstream分支上(这一项其实用于经常从本地分支push/pull到同一远程仓库的情景,这种模式叫做central workflow)。
- simple - simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程upstream分支同名,否则会拒绝push操作。
- matching - push所有本地和远程两端都存在的同名分支。
因此如果我们使用了git2.0之前的版本,push.default = matching,git push后则会推送当前分支代码到远程分支,而2.0之后,push.default = simple,如果没有指定当前分支的upstream分支,就会收到fatal提示。
常用命令
git clone [url] [path] 将一个完整的远程代码库拷贝到本地
git remote 列出所有远程主机
git remote -v 查看远程主机的网址
git remote add origin url 添加一个远程主机
git remote remove origin/git remote rm origin 删除远程主机
git clone -o test https://github.com/chenghuanhuan/test.git 克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
git remote show [主机名] 查看该主机的详细信息。
git fetch [远程主机名] [分支名]
此命令执行了两个关键操作
- 创建并更新所有远程分支的本地远程分支
- 设定当前分支的 FETCH_HEAD为远程分支的master分支(未指定远程分支的情况下)
git pull [远程主机] [分支名] 从远程分支更新代码到本地分支
相当于以下两步
- git fetch
- git merge FETCH_HEAD
**git rm -r *** 删除目录下所有文件和子目录
git rm --cached f1 删除文件f1,不会删除本地目录文件,只删除index中的文件记录;将已经git add的文件remove到cache中,这样commit的时候不会提交这个文件, 适用于一下子添加了很多文件, 却又想排除其中个别几个文件的情况.
git status
查看版本库的状态。可以得知哪些文件发生了变化,哪些文件还没有添加到git库中等等。 建议每次commit前都要通过该命令确认库状态。
git push origin :master
git push origin --delete master
删除远程分支
git push origin --tags git push不会推送标签(tag),除非使用--tags选项。
git branch 查看本地存在的分支
git branch [分支名] 创建新分支
git branch -r 查看远程分支
git branch -a 查看远程和本地的分支
git checkout [分支名] 切换分支
git checkout -b [分支名] 切换并创建分支
git branch -d/-D [分支名] 删除本地分支
git branch -d -r [远程分支名] 删除远程分支
git branch -m/-M [旧分支名] [新分支名] 修改分支名
退回代码到某一个版本
- git log
- git reset --soft ${commit-id}
- git stash
- git push -f
详解如下:
第1行: git log 查看提交历史,然后找到要回滚的版本 。历史如下,
- commit 84686b426c3a8a3d569ae56b6788278c10b27e5b
- Author: JeffLi1993 qiangqiangli1993@gmail.com
- Date: Fri Apr 8 19:11:32 2016 +0800
- 我删除了老板的东西
- commit 72bd6304c3c6e1cb7034114db1dd1b8376a6283a
- Author: JeffLi1993 qiangqiangli1993@gmail.com
- Date: Fri Apr 8 19:05:23 2016 +0800
- add A.txt
我们想要回滚到的版本就是:72bd6304c3c6e1cb7034114db1dd1b8376a6283a
第2行:git reset –soft 72bd6304c3c6e1cb7034114db1dd1b8376a6283a
撤销到某个版本之前,之前的修改退回到暂存区(不懂看漂亮的图哦~)。soft 和 hard参数的区别就是,hard修改记录都没了,soft则会保留修改记录。
第3行:暂存为了安全起见。
第4行:git push -f
将本地master push 到远程版本库中, -f 强制覆盖 。
基础知识
文件的三种状态
- 已提交(committed)表示该文件已经被安全地保存在本地数据库 中了;
- 已修改(modified)表示修改了某个文件,但还没有提交保存;
- 已暂存(staged)表示把已修改的文件放在下次提交时要保存的清单中;
参考资料
http://www.open-open.com/lib/view/open1460134175743.html
https://segmentfault.com/a/1190000002783245
http://www.open-open.com/lib/view/open1328069609436.html