@yangfch3
2016-02-25T17:53:54.000000Z
字数 6347
阅读 7293
git
user.name
和user.email
配置变量。 因为
gotgithub
是一个仅在本书使用的示例账号,我可不想影响本地其他项目的提交,因此下面的设置命令没有使用--global
参数,只对本地版本库进行设置。
$ git config user.name "Jiang Xin"
$ git config user.email "gotgithub@gmail.com"
多次设置可覆盖与更新
commit
日志log
有时间、提交人员与邮箱参数 本地
commit
之后想变更log
里的邮箱与人员
- 按照
1>
里的重新设定user.name
和user.email
- 使用
git commit
修正命令:git commit --amend --reset-author -C HEAD
--amend
:修正
--reset-author
可选参数:只修正author
人员与邮箱。不添加此参数则不更新user
的参数
-C HEAD
:维持(continue
)提交说明(-m
)信息不变
不加参数则是修改commit
的 comment 信息
log
或者reflog
的--pretty=fuller
可以查看提交的详细日志
--pretty=oneline
可以查看提交的简要日志(只有版本号)
注意:git
是根据commit
的先后,或者说 更改 来决定新旧
而不是内容
例如:
本地删除全部文件,做了提交,那么本地旧领先远程一个提交,本地分支就是新于远程分支
git push -f
强制推送用于自己很明确报了无意义错时采用 Git
的分支就是保存在.git/refs/heads/
命名空间下的引用。当前版本库中的默认分支master
就对应于文件.git/refs/heads/master
。创建分支并转到该分支:git checkout -b newbranch
默认是在当前分支的最新提交的基础上新建分支
git checkout -b newbranch basebranch
:在指定的basebranch
分支的最新提交点的基础上新建分支
git checkout -b newBrach [originName]/[remoteBranch]
在远程某分支的最新提交的基础上(如果该分支已fetch
保存在.git
仓库里的话)新建分支,但是不建立对应的追踪关系
git clone
时只在本地创建与远程同名的默认分支,并建立追踪关系
工作区新建的分支需要与远程分支建立关系时:
git branch --set-upstream [branchName] [originName]/[remoteBranchName]
将本地分支与远程某分支建立追踪关系(并没有要求名字必须相同)
有两个参数
git branch --track [originName]/[remoteBranchName]
将自己当前工作分支与某远程分支建立联系
git branch --set-upstream-to [originName]/[remoteBranchName]
只有一个参数
git push -u [originName] [branchName]:[remoteBranchName]
是先建立[branchName]:[remoteBranchName]
追踪对应关系,再把本地更新推上去
省略[branchName]
则代表是当前工作分支
-u
参数是upstream
的意思
git pull -u [originName] [branchName]:[remoteBranchName]
只负责拉下某个远程分支的更新到本地某分支,但是 无法建立追踪关系
git push
、git pull
、git push --all
这些缺省指定分支和参数的命令最好在已经指定了追踪关系后使用
其中:1,2,3,4可建立追踪关系
git branch -vv
// output
* dev 080235f [temp/dev] add 2 line_dev
master cc4a3f1 [temp/master] add 2 line
或者采用cat .git/config
或者git config --list
[remote "temp"]
url = git@github.com:yangfch3/temp.git
fetch = +refs/heads/*:refs/remotes/temp/*
// 远程分支信息
[branch "master"]
remote = temp
merge = refs/heads/master
[branch "dev"]
remote = temp
merge = refs/heads/dev
// master和dev的分支追踪情况
git symbolic-ref HEAD refs/heads/newbranch
rm .git/index
git clean -fdx
情景1:本地有分支,把分支更新推送到远程版本库(远程版本库还没有对应的分支)
git push -u origin newbranch
-u
参数的作用:
本地新建分支,远程仓库并没有该新分支,-u
代表的意思:1.在远程仓库创建新版本库:newbranch;2.将本地新分支与新建的远程分支建立联系;3.push新分支上的文件上远程新分支去
情景2:远程有分支,本地还没有创建对应的分支
方案一:
- 本地新建分支
- 在现有分支的基础上新建分支:见上方创建分支
- 创建一个新的空分支
git symbolic-ref HEAD refs/heads/newbranch
rm .git/index
git clean -fdx
- 取回远程分支的代码
git pull [originName] [remoteBranchNaem]
这样就能在本地创建一个全新的分支且与远程同步并不发生冲突了
情景3:本地和远程都没分支 ===> 划归到情景 1 或 2
情景4:本地和远程有相同数量的分支 ===> 建立分支追踪即可
删除本地分支:
$ git branch -D mybranch1
删除远程分支:
git push [originName] --delete [branchName]
如何在本地删除分支后,使远程的该分支也得到删除?
再使用下面的命令删除远程分支
$ git push origin :mybranch1
To git@github.com:gotgithub/helloworld.git
- [deleted] mybranch1
相当于把一个空的分支推送到远程分支上,达到删除的目的
注意:不能删除设置的默认分值,删除时会报错
如何在删除远程分支后,使本地分支也得到删除?
$ git pull -p [origin]
远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。
加上参数 -p 就会在本地删除远程已经删除的分支。
git branch -a [-v]
:all,可选-v
参数git branch -r [-v]
:remote,可选-v
参数git branch -v
:verbose(冗长的)
git remote
:
git remote -v
:verbose(冗长的)git remote show [originName]
:查看某远程源的超详细信息一个本地仓库可以添加多个远程仓库源,为了辨识,请为源的名字语义化命名。
git remote add [originName] [repoLocation]
在很多时候我们需要为代码的版本打上标签。需要的时候我们可以将代码回滚到特定的版本。
本地git
的tag
命令用于操作代码的标签。git
的tag
可以视为版本库的一个快照,他的本质也是将一个版本的指针固定的指向某个commit
指针。
创建标签:
首先切换到需要打标签的分支:
git branch
git checkout master
找到对应需要打标签的commit
点:
git log --pretty=oneline --abbrev-commit
或
git reflog
新建标签(简单标签):
git tag [tagName]
:默认在当前commit
点打标签[tagName]
git tag [tagName] [commitID]
:在对应的commitID
打标签[tagName]
git tag -a [tagName] -m "[comment]" [commitID]
:在commitID
下创建[tagName]
,并书写版本说明
查看标签:
git tag
:查看以ASCII码排序的标签列表
v0.9
v1.0
git show [tagName]
:查看
操作标签
git push origin [tagName]
:推送某个标签到远程仓库 git push origin --tags
:一次性推送所有tag
更新到远程仓库git tag -d [tagName]
:删除本地tag
git push origin :refs/tags/[tagName]
:删除本地tag
后删除远程仓库对应的tag
git config --global alias.[orderAbbrev] [orderNormal]
:个性化配置长命令成短命令
git config --global color.ui true
:使 git 命令行显示不同的颜色
当前用户的Git全局配置文件放在用户主目录下的一个隐藏文件.gitconfig
中,可以直接修改进行配置
[user]
name = yangfch3
email = yangfch3@gmail.com
[color]
ui = true
[alias]
co = checkout
每个仓库的配置文件放置在 .git/config
文件下,可手动修改,也可用命令行生成
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:michaelliao/learngit.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "dev"]
remote = origin
merge = refs/heads/dev
[alias]
last = log -1
git clone -o [originName] [gitLocation] [dirName]
从[gitLocation]
地址克隆仓库到[dirName]文件夹,并建立本地仓库与远程仓库联系,加-o
参数可以命名远程仓库源的名字
// 例如
git clone -o jquery git@github.com:jquery/jquery.git myjquery
git merge [branchName] --no-ff -m "[comment]"
:--no-ff
模式合并,并书写commit
说明
git fetch
用于取回更新 $ git fetch [originName]
:参数是远程源名 注意:取回的更新是是放在
.git\refs\remotes\origin
目录下,打开该目录可看到远程源的所有分支
---dev
---master
---...
$ git fetch [originName] [branchName]
注意:虽然我们取回了更新,fetch
取回的之后的更新的保存位置保存在.git\refs\remotes\origin
目录下,那么如何恢复这些更新到工作区呢?
同步工作区与.git
仓库
工作区为空,以fetch
回来的某分支的更新在工作区新建分支,并自动与该远程分支建立追踪关系
git checkout -b [newBranch] [originName]/[remoteBranchName]
上面命令表示,在originName/remoteBranchName
的基础上,创建一个新分支,并建立追踪关系。
git merge [originName]/[branchName]
合并远程分支的更新到当前工作分支(但不建立追踪关系)
$ git pull <远程主机名> <远程分支名>:<本地分支名>
git pull
的标准命令格式
git pull [originName] [remoteBranch]:[branch]
的作用与git fetch
再merge
相近。先取回某分支更新再合并。
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull [originName] [branch]
如果当前分支与远程分支存在追踪关系,git pull
就可以省略远程分支名
$ git pull [originName]
当前分支只有一个追踪分支,连远程主机名都可以省略。
git pull
git push <远程主机名> <本地分支名>:<远程分支名>
git push [origin] [branch]
git push [origin] :[remoteBranch]
git push [origin] --delete [remoteBranch]
git push [origin]
git push
-u
选项指定一个默认主机,这样后面就可以不加任何参数使用git push
。 git push -u origin master
simple
模式---不带任何参数的git push
,默认只推送当前分支 matching
模式---不带任何参数的git push
会推送所有有对应的远程分支的本地分支 Git 2.0
版本之前,默认采用matching
方法,现在改为默认采用simple
方式。如果要修改这个设置,可以采用git config
修改:git config --global push.default matching/simple
git push --force origin
git pull
合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force
选项。 --force
选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用--force
选项。 push
时除了推送单个分支的更新,还可以使用以下命令一并推送所有分支更新,前提是:已经为分支们建立好了追踪关系
git push --all
将所有本地分支更新推送到远程仓库源,前提是:本地所有分支已经和远程建立了追踪关系
git push --all [originName]
多个远程源,只想更新一个远程源的时候使用
参考学习链接:
git
教程_廖雪峰
git
使用练习
GotGithub_@Jiang Xin