git的基本使用

!(http://upload-images.jianshu.io/upload_images/3780525-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 ..." 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 ..." to update what will be committed)
//使用git checkout命令撤销修改
  (use "git checkout -- ..." 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 所有改动日志

文章著作权归本人所有,转载须说明来源。以上命令均为测试所得,如有出入,望指正。

你可能感兴趣的:(git的基本使用)