git命令

git命令

git 从远程仓库获取所有分支

方法一:

git clone只能clone远程库的master分支,无法clone所有分支,解决办法如下:

  1. 找一个干净目录,假设是git_work
  2. cd git_work
  3. git clone http://myrepo.xxx.com/project/.git ,这样在git_work目录下得到一个project子目录
  4. cd project
  5. git branch -a,列出所有分支名称如下:
    remotes/origin/dev
    remotes/origin/release
  6. git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
  7. git checkout -b release origin/release,作用参见上一步解释
  8. git checkout dev,切换回dev分支,并开始开发。

方法二:

git clone xxx
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done(仅当服务器上有本地分支未跟踪的远程分支时,才运行)

# 获取远程所有分支
git fetch --all

# 更新跟踪远程分支的本地分支
git pull --all

fetch更新远程分支的本地副本,因此这对于本地分支始终是安全的,

  1. fetch不会更新本地分支(跟踪远程分支);如果要更新本地分支,则仍然需要拉出每个分支。
  2. fetch不会创建本地分支(跟踪远程分支),您必须手动执行此操作。如果要列出所有远程分支: git branch -a

git放弃本地已修改文件

本地有修改和提交,如何强制用远程的库更新更新。我尝试过用git pull -f,总是提示 You have not concluded your merge. (MERGE_HEAD exists)。

我需要放弃本地的修改,用远程的库的内容就可以,应该如何做?傻傻地办法就是用新的目录重新clone一个,正确的做法是什么?

正确的做法应该是:

git fetch --all
git reset --hard origin/master

git fetch 只是下载远程的库的内容,不做任何的合并git reset 把HEAD指向刚刚下载的最新的版本

git创建分支并推送到远程分支

1、查看当前分支:git branch

2、在当前分支基础上新建分支:git checkout -b 本地分支名

3、推送远程:$ git push origin 远程分支名:本地分支名

删除远程分支

推送一个空分支到远程分支,其实就相当于删除远程分支:

git push origin :分支名

也可以使用:

git push origin --delete 分支名

git放弃本地文件修改

写代码时,本来想切换到主分支,但是切换失败,因为我本地的代码修改了,所以想要放弃本地修改的代码(或者有时代码改的乱七八糟想放弃本地修改)

1. 未使用git add 缓存代码

  • 使用git checkout – filename,注意中间有–
git checkout -- filename
  • 放弃所有文件修改 git checkout .
git checkout .
  • 此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除
  • 此命令不会删除新建的文件,因为新建的文件还没加入git管理系统中,所以对git来说是未知,只需手动删除即可

2. 已使用git add 缓存代码,未使用git commit

  • 使用 git reset HEAD filename
git reset HEAD filename
  • 放弃所有文件修改 git reset HEAD
git reset HEAD
  • 此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了第一步1. 未使用git add 缓存代码,继续使用用git checkout – filename,就可以放弃本地修改

3. 已经用 git commit 提交了代码

  • 使用 git reset --hard HEAD^ 来回退到上一次commit的状态
git reset --hard HEAD^
  • 或者回退到任意版本git reset --hard commit id ,使用git log命令查看git提交历史和commit id
git reset --hard commit id

4、git commit之后,想撤销commit

写完代码后,我们一般这样

git add . //添加所有文件

git commit -m “本功能全部完成”

执行完commit后,想撤回commit,怎么办?

这样凉拌:

git reset --soft HEAD^

这样就成功的撤销了你的commit

注意,仅仅是撤回commit操作,您写的代码仍然保留。

说一下个人理解:

HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2

至于这几个参数:
–mixed

意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作

这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

–soft

不删除工作空间改动代码,撤销commit,不撤销git add .

–hard

删除工作空间改动代码,撤销commit,撤销git add .

注意完成这个操作后,就恢复到了上一次的commit状态。

顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:

git commit --amend

git放弃本地commit

git reset --hard FETCH_HEAD

如果想放弃本地的文件修改,可以使用git reset --hard FETCH_HEAD,FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull

git子模块管理

常用命令:

git clone --recursive 递归的方式克隆整个项目
git submodule add 添加子模块
git submodule init 初始化子模块
git submodule update 更新子模块
git submodule foreach git pull 拉取所有子模块

git submodule foreach git checkout master 批量切换所有子模块到 master ,

git submodule foreach + git命令

git submodule update --remote --merge, 批量合并

例子:

git submodule add 子模块git地址 子模块添加路径(放在项目的哪个目录)

添加子模块:git submodule add http://172.30.3.50/nuonuo-taxdeclaration/tax-declare-neimenggu.git scrapy/neimeng_access

执行主项目更新:git pull,再执行子模块更新:git submodule update --remote

git submodule foreach

git clone 含有子模块的项目

当一个 git 项目包含子模块(submodule) 时,直接克隆下来的子模块目录里面是空的

有两种方法解决:

方法一

如果项目已经克隆到了本地,执行下面的步骤:

1、初始化本地子模块配置文件

git submodule init

2、更新项目,抓取子模块内容

git submodule update

方法二

另外一种更简单的方法,就是在执行 git clone 时加上 --recursive 参数。它会自动初始化并更新每一个子模块。例如:

git clone --recursive https://github.com/example/example.git
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值