远程分支
查看当前的远程库
查看当前配置有哪些远程仓库,可以用 git remote 命令,它会列出每个远程库的简短名字。在克隆完某个
项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库:
git remote
// 显示对应的克隆地址
git remote -v
添加远程仓库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url],现在,我们为gitDemo添加远程仓库:
~/Desktop/gitDemo(master*) » git add origin git@github.com:smileasy/GitLearn.git liuxingxing@liuxingxingdeMacBook-Pro
fatal: pathspec 'origin' did not match any files
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
~/Desktop/gitDemo(master*) » git remote add origin git@github.com:smileasy/GitLearn.git liuxingxing@liuxingxingdeMacBook-Pro
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
~/Desktop/gitDemo(master*) » git remote liuxingxing@liuxingxingdeMacBook-Pro
origin
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
~/Desktop/gitDemo(master*) » git remote -v liuxingxing@liuxingxingdeMacBook-Pro
origin git@github.com:smileasy/GitLearn.git (fetch)
origin git@github.com:smileasy/GitLearn.git (push)
此时我想将代码提交到远程仓库,直接运行git push提示报错:
~/Desktop/gitDemo(master) » git push liuxingxing@liuxingxingdeMacBook-Pro
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
根据提示信息,使用git push –set-upstream origin master:
~/Desktop/gitDemo(master) » git push --set-upstream origin master liuxingxing@liuxingxingdeMacBook-Pro
Enumerating objects: 27, done.
Counting objects: 100% (27/27), done.
Delta compression using up to 12 threads
Compressing objects: 100% (19/19), done.
Writing objects: 100% (27/27), 46.25 KiB | 9.25 MiB/s, done.
Total 27 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To github.com:smileasy/GitLearn.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
从远程仓库抓取数据
用下面的命令从远程仓库抓取数据到本地:
git fetch [remote-name]
此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。git fetch origin 会抓取从你上 次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要, 需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好 了,才能手工合并。更多的是,可以使用 git pull 命令 自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快 且好。
推送数据到远程仓库
使用git push [remote-name] [branch-name]可以将本地仓库中的数据推送到远程仓库.
git push origin master
查看远程仓库信息
我们可以通过命令 git remote show [remote-name] 查看某个远程仓库的详细信息:
~/Desktop/gitDemo(master) » git remote show liuxingxing@liuxingxingdeMacBook-Pro
origin
---------------------------------------------------------------------------------------------------------------------------------------
~/Desktop/gitDemo(master) » git remote show origin liuxingxing@liuxingxingdeMacBook-Pro
* remote origin
Fetch URL: git@github.com:smileasy/GitLearn.git
Push URL: git@github.com:smileasy/GitLearn.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
最后两行告诉我们,运行 git push 时缺省推送的分支是什么.
远程仓库的删除和重命名
我们现在只有一个master分支,如果要测试远程仓库的删除和重命名,则需要先创建新的分支test.我们需要先checkout 一个新的本地分支,然后再关联一个远程分支:
~/Desktop/gitDemo(master) » git checkout -b test liuxingxing@liuxingxingdeMacBook-Pro
Switched to a new branch 'test'
------------------------------------------------------------------------------------------------------------------------
~/Desktop/gitDemo(test) » git push -u origin test liuxingxing@liuxingxingdeMacBook-Pro
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'test' on GitHub by visiting:
remote: https://github.com/smileasy/GitLearn/pull/new/test
remote:
To github.com:smileasy/GitLearn.git
* [new branch] test -> test
Branch 'test' set up to track remote branch 'test' from 'origin'.
-u 参数表示将本地的dev分支和远程的origin/dev分支之间建立跟踪关联。
查看远程分支列表:
git branch -r
用 git remote rename 命令修改某个远程仓库的简短名称,比如想把 test分支 改成 dev_test,可以这么运行:
~/Desktop/gitDemo(test) » git remote rename test dev_test liuxingxing@liuxingxingdeMacBook-Pro
fatal: No such remote: 'test'
移除 对应的远端仓库(删除分支dev_leg_0923):
git push origin --delete dev_leg_0923
更改分支名称(将dev_leg分支改名为dev_liuxingxing):
git branch -m dev_leg dev_liuxingxing
git push origin dev_liuxingxing
打标签
我们在发布某个软件版本的时候,经常需要打标签.
列显已有的标签
git tag
在 Git 自身项目仓库中,有着超过 240 个标签,如果你 只对 1.4.2 系列的版本感兴趣,可以运行下面的命令:
git tag -l 'v1.4.2.*'
新建标签
Git 使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。轻量级标签就像是个不 会变化的分支,实际上它就是个指向特定提交对象的引用。而含附注标签,实际上是存储在仓库中的一个独立 对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使 用 GNU Privacy Guard (GPG) 来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;当 然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题。
含附注的标签
创建一个含附注类型的标签非常简单,用 -a (译注:取 annotated 的首字母)指定标签名字即可:
git tag -a release1.0 -m '发布1.0版本到生产环境'
而 -m 选项则指定了对应的标签说明,Git 会将此说明一同保存在标签对象中。如果在此选项后没有给出具 体的说明内容,Git 会启动文本编辑软件供你输入。
可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。
git show release1.0
签署标签
如果你有自己的私钥,还可以用 GPG 来签署标签,只需要把之前的 -a 改为 -s (译注: 取 Signed 的首 字母)即可:
git tag -s release1.1 -m '使用私钥打标签'
此条命令我并没有验证
轻量级标签
轻量级标签实际上就是一个保存着对应提交对象的校验和信息的文件。要创建这样的标签,一个 -a,-s 或 -m 选项都不用,直接给出标签名字即可:
git tag v1.4-lw
后期加注标签
你甚至可以在后期对早先的某次提交加注标签 :
git log --pretty=oneline //获取校验和
git tag -a version1.2 ab2205fca1 //为指定的提交打上version1.2标签
分享标签
默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其 命令格式如同推送分支,运行 git push origin [tagname] 即可:
~/Desktop/gitDemo(devtest*) » git push origin version1.2 liuxingxing@liuxingxingdeMacBook-Pro
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 186 bytes | 186.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To github.com:smileasy/GitLearn.git
* [new tag] version1.2 -> version1.2
如果要一次推送所有(本地新增的)标签上去,可以使用 –tags 选项:
~/Desktop/gitDemo(devtest*) » git push origin --tags liuxingxing@liuxingxingdeMacBook-Pro
Total 0 (delta 0), reused 0 (delta 0)
To github.com:smileasy/GitLearn.git
* [new tag] list -> list
* [new tag] show -> show
技巧和窍门
Git 命令别名
git config --global alias.co checkout
git config --global alias.sta status
取消暂存文件时的输入比较繁琐,可以自己设置一下 :
git config --global alias.unstage 'reset HEAD'
使用:
~/Desktop/gitDemo(devtest*) » git config --global alias.unstage 'reset HEAD' liuxingxing@liuxingxingdeMacBook-Pro
-------------------------------------------------------------------------------------------------------------------------------------------------
~/Desktop/gitDemo(devtest*) » git status liuxingxing@liuxingxingdeMacBook-Pro
On branch devtest
Your branch is up to date with 'origin/devtest'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: git
-------------------------------------------------------------------------------------------------------------------------------------------------
~/Desktop/gitDemo(devtest*) » git unstage git liuxingxing@liuxingxingdeMacBook-Pro
-------------------------------------------------------------------------------------------------------------------------------------------------
~/Desktop/gitDemo(devtest*) » git sta liuxingxing@liuxingxingdeMacBook-Pro
On branch devtest
Your branch is up to date with 'origin/devtest'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
git
nothing added to commit but untracked files present (use "git add" to track)
如果文件已经处于可以被commit的状态,需要你先reset HEAD掉文件,使文件处于未存储的状态,然后才能通过git checkout – 文件名 来丢弃对文件的修改. git config –global alias.unstage ‘reset HEAD’ 相当于以下2个命令:
git unstage fileA
$ git reset HEAD fileA
另外,我们还经常设置 last 命令 来看最后一次的提交信息 :
git config --global alias.last 'log -1 HEAD'