赞
踩
该方式拉取的分支,都是远程代码仓中的分支。
该方式会将所有分支信息都拉下来,然后通过切换分支操作,直接切换到相应分支。
(1)项目克隆到本地
git clone <克隆地址(如https://github.com/xxx/xxx.git)>
# 克隆时的远程主机名默认为origin,可通过参数-o对远程主机重新命名
git clone -o jQuery https://github.com/jquery/jquery.git
(2)切换分支
git checkout <分支名>
该方式会将指定分支信息都拉下来,远程仓库中的其他分支信息不会出现在本地仓库。
(1)打开git bash命令窗
(2)创建本地代码仓名
mkdir MyProject
(3)进入本地仓文件夹MyProject,并初始化
cd <MyProject>
git init
(4)建立与远程主机origin的连接
git remote add origin <克隆地址(如https://github.com/xxx/xxx.git)>
注意:Git 1.7.0后,可以使用Sparse Checkout(稀疏检出)模式实现。如果希望从Git的远程仓库里检出或拉取指定文件夹或部分文件出来,则先通过如下命令设置后再执行第(5)~(7)步:
# 设置Sparse Checkout稀疏检出模式,指定允许检出的文件夹或部分文件
git config core.sparsecheckout true
# 指定检出archive/config目录下的application.yaml
echo archive/config/application.yaml >> .git/info/sparse-checkout
# 也可以使用通配符,比如:archive*表示archive开头的所有目录;!archive表示不包含archive目录。
# 检出archive目录下所有文件夹和文件:echo archive >> .git/info/sparse-checkout
(5)拉取远程分支到本地
git fetch <远程主机名> <分支名>
# git fetch origin master表示“取回origin主机的master分支”
注意:也可以通过命令get fetch origin <远程分支名称Branch_1>:<本地新建分支名称Branch_1_Loc>
,直接拉取远程分支名称Branch_1
并创建本地新分支远程分支名称Branch_1_Loc
,则不用执行(6)和(7)。
(6)在本地创建分支Branch_1_Loc并切换到该分支(这里创建的Branch_1_Loc分支,远程代码仓不可现)
git checkout -b <本地分支名称(Branch_1_Loc)> <远程分支名称(origin/Branch_1)>
注意:如果想直接拉取远程分支Branch_1
内容,并合并到本地分支Branch_loc_tmp
,可采用如下命令:
git checkout <本地分支名称(Branch_loc_tmp)> #进入本地分支
git pull origin <远程分支名称(Branch_1)> #拉取远程origin的分主机支合并到本地当前所在分支
这里,git pull
与git fetch
的差异,简单可以理解为git pull = git fetch + git merge
,详细差异可参考链接。
该方式创建的本地分支,只在本地可现,远程代码仓不可现。其他信息,请参考链接
(1)切换到某个分支(如Branch_x)
git checkout Branch_x
(2)在该分支下创建分支(如Branch_x_loc1)
git checkout -b Branch_x_loc1
注意:上述Branch_x_loc1即为根据Branch_x创建的。若要将新建Branch_x_loc1推送到远程代码仓,则执行如下命令:
git push origin Branch_x_loc1
(1)添加/删除跟踪状态
文件或目录一旦被跟踪,这一辈子都会在仓库中被跟踪。
# 添加跟踪
git add <文件名或目录>
# 删除跟踪
git rm <文件名或目录> #删除跟踪状态及文件本身
git rm --cache <文件名或目录> #仅删除跟踪状态,文件本身以未跟踪状态保存在本地
(2)设置/取消缓存(暂存)状态
# 设置缓存状态
git add <文件名>
# 取消缓存状态
git reset HEAD <文件名>
(3)提交/撤回修改
# 提交修改
git commit -m '本次提交的注释信息'
# 方式一:撤回提交
# 1.参数:--soft,不删除工作空间commit时改动的内容。也即,只撤销git commit,不撤销git add。
git reset --soft HEAD~i # 若用HEAD^,则表示上一个版本
# 方式二:撤回提交
# 1.参数:--hard,删除工作空间commit时改动的内容。也即,撤销git commit,且撤销git add。
git reset --hard HEAD~i
# 注:上述的i=1...k,且最近一次提交编号为1。
(4)查看文件在"工作区"和"暂存区"之间的具体差异
# 查看工作区和暂存区之间所有的文件差异
git diff
# 查看具体某个文件 在工作区和暂存区之间的差异
git diff -- 文件名
# 查看多个文件在工作区和暂存区之间的差异
git diff -- 文件名1 文件名2 文件名3
其他更多diff对比命令,请参考链接所述。
网上图文资料,请参考链接。具体流程如下:
(1)查看当前状态
# 查看当前分支所有文件的状态
git status
从当前状态中,可以看出所有更改项。
(2)添加本地缓存
添加需要提交的内容到本地Git缓存区。两种方式:
方式1:提交全部更改
git add .
方式2:只提交file_i.xx文件的更改
git add <file_i.xx>
(3)提交代码
git commit -m "更改说明"
(4)本地合并分支
取回远程主机某个分支的更新,再与本地的指定分支合并。
git pull <远程主机名> <远程分支名>:<本地分支名> #拉取远程主机分支合并到指定本地分支
git pull <远程主机名(如origin)> <远程分支名> #拉取远程主机分支合并到本地当前分支
该过程也可通过“5.更新(合并)分支”这一节所述方式实现。
(5)推送远程分支
把当前提交到git本地仓库的代码推送到远程主机的某个远程分之上。
git push <远程主机名> <本地分支名>:<远程分支名> #推送本地分支到远程主机指定分支
git push <远程主机名(如origin)> <远程分支名> #推送当前所在本地分支到远程主机指定分支
git log
命令主要用于查看Git版本演变历史(也就是提交历史),同时根据追加的参数和选项不同,也会有不同的展示效果。详细命令如下:
-p
:按补丁格式显示每个更新的差异,比下一条–stat命令信息更全。--stat
:显示每次提交修改文件的统计信息,每个提交都列出了修改过的文件,以及其中添加和移除的行数,并在最后列出所有增减行数小计。--shortstat
:只显示–stat中最后的行数添加、修改、删除的统计。--name-only
:仅在提交信息后,显示已修改的文件清单。--name-status
:显示新增、修改、删除的文件清单。--abbrev-commit
:仅显示SHA-1校验和的前几个字符,而非所有的40个字符。--relative-date
:使用较短的相对时间,而不是完整格式显示日期(比如“2 weeks ago”)。--graph
:在日志旁以ASCII图形显示分支与合并历史。--online
:列表的形式查看历史版本记录,–pretty=oneline --abbrev-commit 合用的简写。--pretty
:使用其他格式显示历史提交信息。可用的选项包括oneline、short、full、fuller和 format(用来定义自己的格式)。针对一次攒了多个本地提交的Commit,一把push到远程仓库,但是Committer发现Commit Message写得不太规范,需要全部修改好再push一遍的情况,请参考链接1和链接2。
(1)查看远程仓库的地址
git remote -v
(2)修改远程仓库地址
方式一:直接修改
git remote set-url <主机名> <远程仓库地址>
方式一:删除再添加
git remote rm <主机名>
git remote add <主机名> <远程仓库地址>
(3)其他远程仓库操作命令
# 命令列出所有远程主机
git remote
# 查看该主机的详细信息
git remote show <主机名>
# 添加远程主机
git remote add <主机名> <网址>
# 修改远程主机名
git remote rename <原主机名> <新主机名>
将主干分支(master)内容更新到其他分支,步骤如下:
(1)本地先切换到master分支
git checkout master
(2)将master分支代码pull下来
git pull
(3)切换到待更新分支
git checkout 待更新分支名(如my_branch)
注意:如需在第(4)步中,将master强行合并到“待更新分支”,此处可使用git checkout -f 待更新分支名(如my_branch)
。使用了-f
命令后,后面的merger过程将不会有任何提醒。
(4)将master分支代码合并到待更新分支
# 1. merge方式
git merge master
# 2. rebase方式
git rebase master
一般情况下,merge和rebase的使用条件如下:
(5)将merge后的代码push到待更新分支
git push origin 待更新分支名(如my_branch)
git branch -a
git branch
注意:结果列表中前面标*号的表示当前使用分支。
# 建立本地分支master与远程主机origin的分支next之间的追踪关系
git branch --set-upstream master origin/next
git checkout 分支名
在切换分支时,若提示如下错误,则表明当前分支修改内容未提交。可通过commit提交、也可通过stash缓存后再行切换分支。
error: Your local changes to the following files would be overwritten by checkout:
src/.../xxx.py
src/.../.../yyy.py
Please commit your changes or stash them before you switch branches.
注:git stash
命令
可将当前分支(如dev)未提交的修改(即工作区的修改和暂存区的修改)先暂时储藏起来,这样工作区干净了后,就可以切换切换到其他分支。在重新切换会dev分支后,通过git stash pop
命令将之前储藏的修改取出来,继续进行功能开发。详细命令如下:
# 1.查看储藏记录列表。如:
# stash@{index}: WIP on [分支名]: [最近一次的commitID] [最近一次的提交信息]
git stash list
# 2.储藏内容。即存储未提交的修改,stashMessage为当前储藏添加的备注信息。
git stash save 'stashMessage'
# 3.取出存储内容
# 方式1:取出不删除。取出指定index的储藏内容到工作区中,但不从储藏记录列表中删除。
git stash apply stash@{index}
# 方式2:取出并删除。取出最近一次的储藏内容到工作区中,同时从储藏记录列表中删除。
git stash pop
# 3.删除存储内容。删除指定index的储藏内容。
git stash drop stash@{index}
其他信息,请参考链接
# 1.删除本地分支
git branch -D <本地分支>
# 2.删除远程分支方式一(冒号必需带上)
git push origin :<远程分支>
# 删除远程分支方式二
git push origin --delete <远程分支>
若要同时删除本地与远程分支,则同时执行上述两条命令。
git rm -r --cached FileName[or DirectoryName] #参数--cached,同时删除缓存
git commit -m 'delete'
git push
find . -name ".git" | xargs rm -rf
(1)Git与GitHub中文参考文档
(2)Git速查表
(3)Git基础与进阶
(4)git clone/push/pull/fetch命令详解
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。