!(https://img.haomeiwen.com/i3780525/5ba3c246a7db25e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
注:图片链接http://www.ruanyifeng.com/blog/2014/06/git_remote.html。 侵权删
本地项目上传到 Github
例如:使用命令行工具创建一名为 blog的project,推送到自己的 Github
1.新建本地blog仓库
mkdir blog
cd blog
touch readme.txt
//以上三步操作的是workspace
git init
git add readme.txt //git add .提交当前文件前所有新增文件
git commit readme.txt -m "commit log description" //可提交多个文件
//以上操作是将workspace的文件上传到本地仓库
注:
-
git init
将woksapce变成repository,当前文件下多了.git文件夹。**clone远程代码仓库到本地的时候,自带.git文件夹,不再需要git init ** -
git add
把文件添加到暂存区index
(俗称stage) -
git commit
提交更改,把暂存区的所有内容提交到当前本地repository
与SVN比较:
git是commit到本地仓库,svn是commit到远程服务器。svn没有上图中pull、fetch/clone、push、Repository。git的优势在于,当远程服务器duang掉时,任何本地仓库可以通过push操作恢复远程服务器上的仓库。但是svn没有这样的恢复机制
2.在github上新建一个同名的远程仓库,并复制仓库地址
注:创建完成后,github显示仓库里面是空的,什么都没有,只有当你将本地仓库的文件上传,才会显示文件夹
3.把本地仓库推送到远程仓库
把本地仓库文件推送到远程仓库的必要条件是要将暂存区文件清空。可以用commit命令将暂存区文件提交到本地仓库,也可以用reset撤销add的操作,将文件从暂存区移除
//本地仓库连接到remote仓库,并给remote地址取别名叫origin,以后推送就不需要再使用远程地址
git remote add origin remote仓库名
//把本地仓库的文件推送到远程仓库。-u(--set-upstream)设置push分支,设置以后可直接使用git push命令
git push -u origin master
注:
- git remote -v //查看origin对应名称
- git push remote地址 master //不使用别名的推送命令
- git remote set-url origin remote地址 //给origin重新定位
从远程仓库中下载项目文件到本地
git clone 远程仓库名
git pull origin master 相当于svn的update,在git里面相当于执行了git fetch之后与workspace代码合并
创建branch
git branch 项目分支名 //创建分支
git checkout 项目分支名 //切换到刚刚新建的分支。本次仓库也会自动切换。这样就不需要为同一项目上衍生的多个小项目新建仓库。svn就需要建立多个本地文件夹
git branch //查看当前分支
git branch -a //查看所有的分支
git push origin 项目分支名 //将新建分支推送到远程仓库
删除文件
git rm filename
git add -A .
git commit -m "commit log descripition"
git push origin master //同步远程仓库
注:本地错误删除使用git reset --hard HEAD恢复文件
合并branch
git checkout master
git merge 项目分支名 //将新的分支合并到master分支
git push origin master //将合并后的master分支提交到远程仓库
代码回退
//暂存区回退
git checkout -- filename //文件一经修改就进入暂存区。此命令是恢复文件,清除修改
//本地仓库回退
git reset HEAD filename
git reset --hard HEAD //对未commit的被git接管的修改文件,不经过checkout直接回到本地仓库当前版本,当前修改丢失
git reset HEAD指针 //回退到本地仓库指定版本。未commit的被git接管的修改文件,修改内容不会丢失
//本地回退后,同步远程
git push origin master //协作开发时需谨慎
注:
1.HEAD指针在commit时会改变,通过git log命令查看之前的HEAD指针。用reset命令回到以前版本,用checkout命令撤销在当前版本上还未commit的修改。
2.git reset HEAD filename
命令在文件第一次add进暂存区,还未commit时有效,相当于解除git对该文件的管理。已经在git管辖范围里,对修改的文件进行撤销无效,因为文件没有commit,HEAD指针没有改变。此时的撤销修改请用git checkout
命令.
//远程仓库回退
常用查看信息的命令:
- git status 随时关注当前文件夹下文件的修改状况
- 增加了新文件
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
//未追踪文件
Untracked files:
//使用命令git add将新文件add进需要commit的阵列
(use "git add <file>..." to include in what will be committed)
test.txt
//没有文件需要commit,但是有还没有确定路径的文件,请用git add添加
nothing added to commit but untracked files present (use "git add" to track)
- 修改了原来已有的文件(相当于把文件从本地仓库移到了暂存区),但是还未commit
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
//使用git add命令更新需要commit的文件
(use "git add <file>..." to update what will be committed)
//使用git checkout命令撤销修改
(use "git checkout -- <file>..." to discard changes in working directory)
modified: index.html
//没有新文件需要add,然后commit
no changes added to commit (use "git add" and/or "git commit -a")
注:
1.新增文件第一次add之后,还没commit之前,可用git reset HEAD filename
命令撤销,解除新增文件和git之间的关系,新增文件从暂存区移除,即把staged文件变为untracked文件。
2.已经被git接管的文件,一经修改,该文件进入暂存区,提交到本地仓库时,可以不需要再使用add命令。
3.已经被git接管的文件,修改后,没commit之前用git checkout -- filename
命令撤销本地文件修改,即将暂存区的文件恢复到之前状态,清空暂存区。
-
git diff
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式。 -
git log
命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。 -
git reflog
所有改动日志
网友评论