git的使用


1、如何在github上clone数据到本地

首先, clone 一个远端仓库,到其目录下:
git clone git://example.com/myproject 
cd myproject

然后,看看你本地有什么分支:

git branch 
* master

但是有些其他分支你在的仓库里面是隐藏的,你可以加上-a选项来查看它们:

git branch -
* master 
  origin/experimental

如果你现快速的代上面的分支,你可以直接切换到那个分支:

git checkout origin/experimental

但是,如果你想在那个分支工作的话,你就需要创建一个本地分支:

git checkout -experimental origin/experimental

现在,如果你看看你的本地分支,你会看到:

git branch master 
* experimental

你还可以用git remote命令跟踪多个远程分支

git remote add win32 git://gutup.com/users/joe/myproject-linux-port 
git branch -
* master 
  origin/experimental

你可以用gitk查看你做了些什么:

gitk --all &

2、初始化
  • 创建 github 账号,在 github 上新建 repository
  • 创建本地 repository

     

    • 初始化:

      $ git init
      Initialized empty Git repository in /Users/mario/git/.git/
      

      git init 会在当前目录中创建“.git”目录,该目录是你当前仓库的所有快照数据的存储目录。

    • 查看文件状态:

      $ git status
      # On branch master
      #
      # Initial commit
      #
      nothing to commit (create/copy files and use "git add" to track)
      
3、追踪
  • git add - 追踪文件,暂存文件:

    $ git add README 
    $ git status
    # On branch master
    #
    # Initial commit
    #
    # Changes to be committed:
    #   (use "git rm --cached [file]..." to unstage)
    #
    #       new file:   README
    #
    
    

    只要在 “Changes to be committed” 这行下面的,就说明是已暂存状态。

    如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。

4、文件状态
  • 添加文件,查看文件状态:

    $ touch README
    $ ls
    README
    $ git status
    # On branch master
    #
    # Initial commit
    #
    # Untracked files:
    #   (use "git add [file]..." to include in what will be committed)
    #
    #       README
    nothing added to commit but untracked files present (use "git add" to track)
    

    Untracked,显示未追踪。

    git 不会自动追踪新加入的文件,不会纳入版本管理。

5、提交
  • git commit - 提交文件:

    $ git commit -m 'first commit'
    [master (root-commit) 26143a0] first commit
     0 files changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 README
    $ git status
    # On branch master
    nothing to commit (working directory clean)
    

     

    git commit -m ''
    
    -m 后面附加提交说明信息。

     

    不加 -m 会自动打开默认文本编辑器以便提交说明信息

    如果修改的文件之前已被追踪过,那么可以使用 git commit -am '' 暂存提交所有被追踪的文件,不需要进行 gitadd。但这样做会丢掉暂存区带来的好处。

6、移除
  • git rm - 移除文件:

    $ git rm README
    rm 'README'
    $ ls
    $ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD [file]..." to unstage)
    #
    #       deleted:    README
    #
    $ git commit -m 'delete README'
    [master f71c4d1] delete README
     1 files changed, 0 insertions(+), 2 deletions(-)
     delete mode 100644 README
    
7、远程仓库
  • 添加远程仓库:

    $ git remote add origin https://github.com/bzmario/git.git
    $ git remote
    origin
    
  • 上传本地仓库:

    $ git push -u origin master
    Username: 
    Password: 
    Counting objects: 11, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (11/11), 816 bytes, done.
    Total 11 (delta 0), reused 0 (delta 0)
    To https://github.com/bzmario/git.git
     * [new branch]      master -> master
    Branch master set up to track remote branch master from origin.
    

     

    $ git push -u --help
        -u, --set-upstream    set upstream for git pull/status
    
    

     

    设置远程和本地仓库的上传关联,只需要第一次 push 到远程仓库时使用。之后可直接

    git push
    
8、从现有仓库克隆
$ git clone git://github.com/bzmario/git.git git-clone
Cloning into 'git-clone'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Receiving objects: 100% (11/11), done.

git clone 直接将远程仓库克隆至本地,不需要再初始化。

注意,此处 origin 的地址是 git-readonly 地址,是不可以进行 push 的。github 上有三种地址:

  1. http 地址,格式为 https://github.com/用户名/仓库名.git

    push 需要输入用户名和密码

  2. ssh 地址,格式为 git@github.com:用户名/仓库名.git

    使用 ssh 密钥自动登录

  3. git-readonly 地址,格式为 git://github.com/用户名/仓库名.git

    只读, 不可 push 到此仓库的远程仓库。

9、抓取远程仓库数据
$ git pull
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/bzmario/git
   541c754..4d4599a  master     -> origin/master
Updating 541c754..4d4599a
Fast-forward
 README |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

pull 一般用做合并远程和本地分支,pull操作会先从远程仓库抓取数据,然后自动与本地分支的数据合并。如果远程与本地有冲突,则需要手动合并冲突的文件:

$ git pull
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/bzmario/git
   7c40656..72f59fc  master     -> origin/master
Auto-merging README
CONFLICT (content): Merge conflict in README
Automatic merge failed; fix conflicts and then commit the result.

10、解决冲突
$ subl README

任何包含未解决冲突的文件都会以未合并(unmerged)状态列出:

<<<<<<< HEAD
changes from local
=======
changes from github
>>>>>>> 72f59fc6f6ff9ea4f79ea591751d54ef087dfa65

可以看到 ======= 隔开的上半部分,是 HEAD(即本地 master 分支)中的内容,下半部分是在远程 origin分支中的内容。

刚才在本地添加了一行,在远程添加一行,现在删除<<<<<<<,=======,和>>>>>>>这些行,合并内容:

changes from local
changes from github

然后暂存,提交即可 push 到远程。

11、撤销操作

任何时候,你都有可能需要撤消刚才所做的某些操作。

  • 修改最后一次提交:有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用--amend 选项重新提交:

    $ git commit --amend
    
  • 取消已经暂存的文件:有时候不小心使用了 git add . 把所有文件都加到了暂存区域,又想要分开提交,这时候,输入git status,git 会告诉你怎么做:

    $ git add.
    $ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD [file]..." to unstage)
    #
    #       modified:    README
    #       modified:    a.txt
    #
    

    使用 git reset HEAD 文件,就可以对该文件取消暂存。

  • 取消对文件的修改:git checkout -- 文件名,即可抛弃文件修改的命令。

    注意:此操作会将文件恢复到上次提交时的状态。

12、标签

git 可以对某一时间点上的版本打上标签。人们在发布某个软件 版本(比如 v1.0 等等)的时候,经常这么做。

  • 列出所有标签:

    $ git tag
    v0.1
    v1.3
    

    显示的标签按字母顺序排列,所以标签的先后并不表示重要程度的轻重。

  • 列出符合条件的标签:

    $ git tag -l 'v1.4.2.*'
    v1.4.2.1
    v1.4.2.2
    v1.4.2.3
    v1.4.2.4
    
13、新建标签

git使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。轻量级标签和分支很相似只是不能改变,是个指向特定提交对象的引用。而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明等。

  • 含附注的标签:

    $ git tag -a v1.4 -m 'my version 1.4'
    $ git tag
    v0.1
    v1.3
    v1.4
    

    -a 指定标签名字,-m 指定标签说明

  • 轻量及标签:

    $ git tag v1.4-lw
    $ git tag
    v0.1
    v1.3
    v1.4
    v1.4-lw
    v1.5
    

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行git push origin [tagname] 即可。

如果要一次推送所有(本地新增的)标签上去,可以使用 git push origin --tags 选项

14、分支

一个简单的分支与合并的例子,实际工作中会用到这样的工作流程::

  1. 开发某个网站。

  2. 为实现某个新的需求,创建一个分支。

  3. 在这个分支上开展工作。

假设此时,你突然接到一个电话说有个很严重的问题需要紧急修补,那么可以按照下面的方式处理

  1. 返回到原先已经发布到服务器上的分支。

  2. 为这次紧急修补建立一个新分支。

  3. 测试通过后,将此修补分支合并,再推送到服务器上。

  4. 切换到之前实现新需求的分支,继续工作。

15、分支操作
  1. 查看分支:

    $ git branch
    * master
    
  2. 新建分支:

    git branch [branch name]

    新建分支 testing 的内容,与当前分支内容上一次提交时相同。如果此时你在当前分支做了修改,又进行提交,然后切换到 testing分支,testing 分支仍是 master 提交前的样子。

  3. 切换分支

    git checkout [branch name]

    和切换分支类似,标签也可以使用这个命令加标签名字进行切换,但你在切换到的标签里所做的任何改变都不会被记录,标签记录的快照内容是不可更改。

  4. 删除分支

    git branch -d [branch name]

  5. 提交分支到远程:

    git push origin [branch name]

    如果所有分支的暂存内容都已提交,但没有推送到远程分支,使用 git push 不加名称,可以推送所有已提交内容。git pull同理。

  6. 分支的合并:

    git merge [branch name]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值