git使用

Posted by llussy on December 30, 2019

[TOC]

git clone

git clone是把整个git项目拷贝下来,包括里面的日志信息,git项目里的分支,你也可以直接切换、使用里面的分支等等。

下载完成后可以进入目录,使用git branch查看有多少分支,使用git tag查看有多少tags。

使用私钥克隆

ssh -i ~/.ssh/id_rsa_example" git clone example
ssh-agent sh -c "ssh-add /Users/lisai/anfeng/id_rsa;git clone git@git.test.com:lisai/test-back.git"

gitlab token clone

git clone https://gitlab+deploy-token-7:Vop81UtiaZJ2xFooRGEf@git.test.com/llussy/Prometheus-WeChat-Alerts.git

git fetch

git fetch pb 从远程仓库获取数据,拉取仓库中有的但你没有的信息,它并不会自动合并或修改你当前的工作。

git pull

git pull相当于git fetch和git merge。其意思是先从远程下载git项目里的文件,然后将文件与本地的分支进行merge。

$ git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

$ git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next
$ git pull origin master   (省略了本地分支)
git pull origin layer7 (拉取远程指定分支)

git rebase

git rebase介绍

git remote add upstream https://github.com/xxx/xxx
git fetch upstream
git checkout master
git rebase upstream/master
git push -f origin master

git push

git push <远程主机名> <本地分支名>:<远程分支名>

注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin :master
# 等同于
$ git push origin --delete master

上面命令表示删除origin主机的master分支。

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

$ git push origin

上面命令表示,将当前分支推送到origin主机的对应分支。

如果当前分支只有一个追踪分支,那么主机名都可以省略。

$ git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

$ git push --all origin

上面命令表示,将所有本地分支都推送到origin主机。

如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项。

$ git push --force origin

上面命令使用–force选项,结果导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用–force选项。

最后,git push不会推送标签(tag),除非使用–tags选项。

$ git push origin --tags

有时候当远程xxx分支被删掉了后,用git branch -a 你还可以看到本地还有remote/origin/xxx这个分支,那么你可以使用git fetch -p 这个命令可以帮你同步最新的远程分支,并删掉本地被删了的远程分支。

git remote

git remote 列出已经存在的远程分支 -v 详细信息

添加远程仓库 git remote add

git remote add pb https://github.com/paulboone/ticgit

git checkout

恢复到修改前的状态

# 恢复暂存区的指定文件到工作区  修改文件后,没有add 执行git check [file]恢复到修改前状态
$ git checkout [file]

# 恢复暂存区的所有文件到工作区
$ git checkout .

创建分支并切换

$ git checkout -b test master 
取master分支并创建test 分支(master和test一致)
相当于git branch test && git checkout test

使用某次commit创建分支

git checkout -b lisai eaeb8f771be34793c9ade030629167bc537d12af

git diff

git diff 修改之后还没有暂存起来的变化内容。

git diff –cached 或 git diff –staged 若要查看已暂存的将要添加到下次提交里的内容

git log

git log 查看提交历史

参数:

-p 选项展开显示每次提交的内容差异

-2 只显示最近两次更新

–stat 仅显示简要的增改行数统计

git status

git status -s

$ git status -s
 M README        ###修改过没有放入暂存区的文件
MM Rakefile
A lib/git.rb      ###新加到暂存区的文件
M lib/simplegit.rb  ###修改过并放入暂存区的文件
?? LICENSE.txt     ###未跟踪文件

新添加的未跟踪文件前面有 ?? 标记

新添加到暂存区中的文件前面有 A 标记

修改过的文件前面有 M 标记。你可能注意到了 M有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M表示该文件被修改了并放入了暂存区。

git revert

revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 就可以把线上的代码更新.

revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.

git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

通常,前几位即可

git revert c011eb3

git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit

看似达到的效果是一样的,其实完全不同.

git reset

git reset --hard HEAD^    # 回退到上一版本 --hard 本地修改也会被清除,彻底还原
git reset --soft HEAD^    # 仅仅重置HEAD到制定的版本,不会修改index和working tree
git reset --hard commit_id

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区

.gitlab-ci.yml

golang

stages:
  - build

build:
  stage: build
  image: docker.test.com/base/golang:1.12.6
  script:
    - export GO111MODULE=on
    - export GOPROXY=https://goproxy.io
    - cd cmd/configine && go build -v -mod=readonly

image: golang:1.12

cache:
  paths:
    - /apt-cache
    - /go/pkg/mod/cache/download

stages:
  - test
  - build

before_script:
  - export GO111MODULE=on
  - export GOPROXY=https://goproxy.io
  - go get  github.com/swaggo/swag/cmd/swag@v1.5.1

unit_tests:
  stage: test
  script:
    - make test

build:
  stage: build
  script:
    - make