git的使用

来源:互联网 发布:如何管理淘宝 编辑:程序博客网 时间:2024/05/22 01:10
deckJs演讲稿:http://marujun.github.com/deckJs/gitbasic/Git.html

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

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

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

$ git branch 
* master

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

$ git branch -a 
* master 
  origin/experimental

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

$ git checkout origin/experimental

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

$ git checkout -b experimental origin/experimental

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

$ git branch master 
* experimental

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

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

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

$ gitk --all &

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

     

    • 初始化:

      $ git initInitialized 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$ lsREADME$ git status# On branch master## Initial commit## Untracked files:#   (use "git add [file]..." to include in what will be committed)##       READMEnothing 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 masternothing to commit (working directory clean)

     

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

     

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

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

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

    $ git rm READMErm '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 remoteorigin
  • 上传本地仓库:

    $ git push -u origin masterUsername: 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 -> masterBranch 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-cloneCloning 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 pullremote: 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/masterUpdating 541c754..4d4599aFast-forward README |    4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)

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

$ git pullremote: 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/masterAuto-merging READMECONFLICT (content): Merge conflict in READMEAutomatic merge failed; fix conflicts and then commit the result.

10、解决冲突
$ subl README

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

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

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

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

changes from localchanges 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 tagv0.1v1.3

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

  • 列出符合条件的标签:

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

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

  • 含附注的标签:

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

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

  • 轻量及标签:

    $ git tag v1.4-lw$ git tagv0.1v1.3v1.4v1.4-lwv1.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]

原创粉丝点击