常用Git操作
Table of Contents generated with DocToc (opens new window)
# 常用Git操作
克隆
1.1默认克隆
- git clone 链接;
1.2从指定分支克隆
- git clone -b 分支名 链接
fork后发起pr,解决pr冲突,需先从上游仓库拉取代码更新到本地,再将本地更新到自己的远程仓库,再pr
- 查看自己远程仓库的路径:git remote -v
- 设置upstream,即上游代码库,也就是配置源仓库的路径:git remote add upstream URL(源仓库的地址)
- 执行git status 查看本地是否有修改未提交。
- 抓取源仓库的修改更新文件到本地:git fetch upstream
- 切换到master分支:git checkout master (可不做)
- 合并远程的master分支:git merge upstrem/master
- 把本地仓库向gitlab仓库(fork到自己名下的仓库)推送修改:git push
- 发起pr即可
解决版本冲突:
- git pull (remote的自己设的别名) master(要拉取的分支名):将fork的源仓库代码更新到本地
- 然后本地更新到fork仓库,fork仓库再pr到源仓库
git pull 和git fetch的区别:
git fetch
是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。- 而
git pull
则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge
,这样可能会产生冲突,需要手动解决。
# 分支(branch)的基本操作
git branch //查看本地所有分支
git branch -r //查看远程所有分支
git branch -a //查看本地和远程的所有分支
git branch < branchname> //新建分支
git branch -d < branchname> //删除本地分支
git branch -d -r < branchname> //删除远程分支,删除后还需推送到服务器
git push origin:< branchname> //删除后推送至服务器
git branch -m < oldbranch> < newbranch> //重命名本地分支 /** *重命名远程分支: *1、删除远程待修改分支 *2、push本地新分支到远程服务器 */
//git中一些选项解释: -d --delete:删除 -D --delete --force的快捷键 -f --force:强制 -m --move:移动或重命名 -M --move --force的快捷键 -r --remote:远程 -a --all:所有
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# git fetch的用法
git fetch 命令:
$ git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
如果只想取回特定分支的更新,可以指定分支名:
$ git fetch <远程主机名> <分支名> //注意之间有空格
最常见的命令如取回
origin
主机的master
分支:$ git fetch origin master
取回更新后,会返回一个
FETCH_HEAD
,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:$ git log -p FETCH_HEAD
可以看到返回的信息包括更新的文件名,更新的作者和时间,以及更新的代码(19行红色[删除]和绿色[新增]部分)。
我们可以通过这些信息来判断是否产生冲突,以确定是否将更新merge到当前分支。
# git pull的用法
前面提到,git pull
的过程可以理解为:
git fetch origin master //从远程主机的master分支拉取最新内容 git merge FETCH_HEAD //将拉取下来的最新内容合并到当前所在的分支中
即将远程主机的某个分支的更新取回,并与本地指定的分支合并,完整格式可表示为:
$ git pull <远程主机名> <远程分支名>:<本地分支名>
如果远程分支是与当前分支合并,则冒号后面的部分可以省略:
$ git pull origin next
# remote 命令
为了便于管理,Git 要求每个远程仓库必须指定一个别名。remote 命令就用于管理仓库别名的命令。
1.远程仓库指的是托管在网络上的项目仓库。
2.通过 clone 命令克隆下来的仓库,默认的别名是 origin。
3.主要涉及的操作有:增(add)、删(remove)、改(rename,set-url)、查(show , get-url)。
2
3
4
5
# 常用命令
命令 | 解释 | 选项 |
---|---|---|
git remote add < name> < url> | 添加新的远程库 | |
git remote remove < name> | 删除指定的仓库 | |
git remote rename < old> < new> | 将仓库别名重命名为 new | |
git remote set-url < name> < newurl> | 将仓库的 url 修改为 newurl | |
git remote | 列出所有的远程库 | -v 表示查看每个库的 url |
git remote show < name> | 查看指定库的详细信息 | |
git remote get-url < name> | 获得指定仓库的 url |
在操作时,将别名与 url 的关系理解为 Map 集合 —— 其中别名是 key,url 是 value。
# 添加
**git remote add **:添加一个远程库,同时为该远程库指定别名,使用别名指代远程库地址。
git remote add images https://github.com/birdandcliff/images.git
以后可以使用 images 代替对应的url。
使用该命令可以将本地已有的文件与远程仓库关联,从而可以将本地已有的文件提交到远程仓库中。
2
3
4
# 删除
使用 **git remote remove ** 移除别名对应的仓库。
$ git remote
demo
newo
$ git remote remove newo
$ git remote
demo
2
3
4
5
6
7
# 修改
使用 **git remote rename ** 修改某个远程库的别名。
对远程库重命名后,对应的分支也会发生变化,将其中关于别名部分换成新别名。
$ git remote -v
demo https://github.com/birdandcliff/seturl.git (fetch)
demo https://github.com/birdandcliff/seturl.git (push)
$ git remote -v
demo https://github.com/birdandcliff/seturl.git (fetch)
demo https://github.com/birdandcliff/seturl.git (push)
$ git remote rename demo demo2
$ git remote -v
demo2 https://github.com/birdandcliff/seturl.git (fetch)
demo2 https://github.com/birdandcliff/seturl.git (push)
2
3
4
5
6
7
8
9
10
11
12
可以看出, url 没有发生变化,但对应的别名已经修改过了。
# 修改url
使用 **git remote set-url ** 将指定的远程仓库地址修改为 newurl。
$ git remote -v
demo https://github.com/birdandcliff/gitdemo.git (fetch)
demo https://github.com/birdandcliff/gitdemo.git (push)
$ git remote set-url demo https://github.com/birdandcliff/seturl.git
$ git remote -v
demo https://github.com/birdandcliff/seturl.git (fetch)
demo https://github.com/birdandcliff/seturl.git (push)
2
3
4
5
6
7
8
修改仓库地址后,可以将本地文件提交提交到新的 url 中。
# 查看
可以查看所有的别名,也可以查看所有的别名与 url,还能通过别名查看指定的 url。
git remote 会列出每一个远程库的别名。可以使用 -v (verbose,详细)选项指定列出详细信息。如下:
**git remote show ** 可查看某个远程库的详细信息
**git remote get-url ** 根据 name 查看指定的 url
$ git remote
newo
$ git remote -v
newo https://github.com/birdandcliff/seturl.git (fetch)
newo https://github.com/birdandcliff/seturl.git (push)
$ git remote get-url newo
https://github.com/birdandcliff/seturl.git
$ git remote show newo
* remote newo
Fetch URL: https://github.com/birdandcliff/seturl.git
Push URL: https://github.com/birdandcliff/seturl.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)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# remote的配置信息
使用 git remote add <别名> url
后,会在 .git/config 文件中添加如下信息:
[remote "demo"]
url = https://github.com/birdandcliff/gitdemo.git
fetch = +refs/heads/*:refs/remotes/demo/*
2
3
fetch 的格式由一个可选的 + 号和紧随其后的 : 组成。其中 < src> 代表远程仓库中的引用;< dst> 是那些远程引用在本地所对应的位置。 + 号告诉 Git 即使在不能快进的情况下也要(强制)更新引用。
因此,Git 会获取 refs/heads/ 下面的所有引用,并将它写入到本地的 refs/remotes/demo/ 中。
- 可以对 fetch 进行手动修改。如将 fetch 行修改如下:
fetch = +refs/heads/master:refs/remotes/demo/master
那么使用 git fetch
时,就只会拉取远程仓库的 master。
- 分支信息并不一定要存储在 demo 目录下。可以在该目录下任意指定子目录。如:
[remote "demo"]
url = https://github.com/birdandcliff/gitdemo.git
fetch = +refs/heads/re:refs/remotes/demo/devlocal
fetch = +refs/heads/tra:refs/remotes/demo/xx/tra
2
3
4
远程的 tra 分支存储的路径就在 demo/xx 目录下,而不是直接位于 demo 目录下。
引用 tra 远程分支时,也需要写成 demo/xx/tra
,不能直接写成 demo/tra
形式。如:
$git branch -u demo/xx/tra
Branch dev set up to track remote branch tra from demo.
2