menu Chancel's Blog
rss_feed lightbulb_outline

我的笔记

Git - 删除远程仓库分支并提交新分支

Git删除远程仓库分支并提交新分支

# 删除远程分支develop
git branch -r -d origin/origin/develop

# 推送当前分支到远程分支develop
git push origin :origin/develop

Develop Base Git 2021-02-04 11:35:02

Git - 忽略规则和.gitignore规则不生效解决方案

把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件

如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态)

最后再次提交即可

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

Develop Base Git 2021-02-04 11:32:33

Git - "fatal: unable to auto-detect email address "

Git Push的时候出现警告“fatal: unable to auto-detect email address ”

只需要更改当前仓库下的.git/config文件,在其中加入

[user]
    email = xxx
    user = xxx

即可消除这个警告

Develop Base Git 2021-02-04 11:31:11

Git - 快速使用Git标签标记发布版本

像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。

Git支持两种标签 轻量标签与附注标签(lightweight/annotated),版本标签推荐使用 附注标签

给特定Commit打标签的Git语法如下

# 附注标签
git tag -a [version] -m [comment] [commitID]
# 轻量标签
git tag [version] -m [comment] [commitID]

以实际例子来看看,首先假设当前要提交的版本号为V2.0.0,当前的提交CommitID为06551e1fac

给06551e1fac打上标签

# 附注标签例子
git tag -a v2.0.0 -m "V2.0.0 Version" 06551e1fac
# 轻量标签例子
git tag v2.0.0 -m "V2.0.0 Version" 06551e1fac

标签创建后只存在于本地,如果需要推送到远程仓库,那么需要显式推送

# 单次推送2.0.0标签
git push origin v2.0.0
# 推送所有的标签
git push origin --tags

其他常见操作如下

签出标签(PS:常见于修复旧版本的问题,但请注意签出后本地仓库状态处于 detached 状态,所以要修复旧版本中的错误,建议签出并新建为分支)

# 签出2.0.0版本并创建为v2.0version分支
git checkout -b v2.0version v2.0

删除标签

# 删除本地标签
git tag -d v2.0.0
# 删除远程仓库标签
git push origin --delete v2.0.0

查看标签

# 列出标签列表
git tag
# 查看与2.0版本相关的标签
git tag -l v2.0.0
# 查看标签的详细内容
git show v2.0.0

Develop Base Git 2020-11-04 08:01:40

Git - Bash脚本判断本地仓库代码是否需要更新

线上的一些小项目偶尔需要实现自动更新,那么可以考虑结合Git仓库的Master来做自动更新,小的项目没必要考虑去写一个Jenkins配置单

首先要配置项目无需验证账户密码就可以拉取文件,执行完下面命令,输入账户密码后下次拉取代码不会重新询问账户密码

git config --global credential.helper store
git pull

设置一下自动拉取Master分支,然后结合Supervisor重启一次应用程序即可啦

#!/bin/bash
# author: Chancel.Yang

projectPath='/home/Apps/hello-world'
projectName='hello-world'
cd $projectPath
git fetch
UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @{0})
REMOTE=$(git rev-parse "$UPSTREAM")
BASE=$(git merge-base @{0} "$UPSTREAM")
if [ $LOCAL = $REMOTE ]; then
    echo "Up-to-date"
elif [ $LOCAL = $BASE ]; then
    supervisorctl stop $projectName
    # 脚本由Root执行,但拉取不可用Root用户否则项目执行用户Apps无权限执行项目
    su - Apps git pull
    supervisorctl start $projectName

执行这个脚本就可以获取到Github远程仓库与本地仓库的版本差别

注意git的旧版本不允许使用@,所以你可能需要使用@ {0}

Develop Base Git 2021-01-11 04:37:41

Git Stash - 不提交代码保存当前代码的修改并切换分支进行其他工作

Git 工具 - 储藏(Stashing)

经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。

重点

  • git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中
  • git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复
  • git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复
  • git stash clear: 清空Git栈

例子

# chancel @ chancel-cp in /tmp/stash on git:master o [12:04:03] 
$ git status
On branch master
nothing to commit, working tree clean

# chancel @ chancel-cp in /tmp/stash on git:master o [12:05:11] C:130
$ echo "I'm fine,fuck you" > hello.py

# chancel @ chancel-cp in /tmp/stash on git:master x [12:05:17] 
$ ll
total 8.0K
-rw-r--r-- 1 chancel chancel  4  9月  6 12:03 123.txt
-rw-r--r-- 1 chancel chancel 18  9月  6 12:05 hello.py

# chancel @ chancel-cp in /tmp/stash on git:master x [12:05:18] 
$ git add .

# chancel @ chancel-cp in /tmp/stash on git:master x [12:05:21] 
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   hello.py


# chancel @ chancel-cp in /tmp/stash on git:master x [12:05:24] 
$ git stash
Saved working directory and index state WIP on master: a404cee first commit

# chancel @ chancel-cp in /tmp/stash on git:master o [12:05:37] 
$ git status
On branch master
nothing to commit, working tree clean

# chancel @ chancel-cp in /tmp/stash on git:master o [12:05:41] 
$ ll     
total 4.0K
-rw-r--r-- 1 chancel chancel 4  9月  6 12:03 123.txt

# chancel @ chancel-cp in /tmp/stash on git:master o [12:05:54] 
$ echo "hello" > hello.txt

# chancel @ chancel-cp in /tmp/stash on git:master x [12:06:17] 
$ ll 
total 8.0K
-rw-r--r-- 1 chancel chancel 4  9月  6 12:03 123.txt
-rw-r--r-- 1 chancel chancel 6  9月  6 12:06 hello.txt

# chancel @ chancel-cp in /tmp/stash on git:master x [12:06:21] 
$ git add hello.txt 

# chancel @ chancel-cp in /tmp/stash on git:master x [12:06:26] 
$ git stash
Saved working directory and index state WIP on master: a404cee first commit

# chancel @ chancel-cp in /tmp/stash on git:master x [12:07:20] 
$ ll
total 8.0K
-rw-r--r-- 1 chancel chancel 4  9月  6 12:03 123.txt
-rw-r--r-- 1 chancel chancel 6  9月  6 12:07 hello.txt


# chancel @ chancel-cp in /tmp/stash on git:master x [12:07:45] 
$ git stash pop
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   hello.txt

Dropped refs/stash@{0} (b9963709ffa5959d2341b31378d9b3457a2b9798)

# chancel @ chancel-cp in /tmp/stash on git:master x [12:07:56] 
$ ll
total 8.0K
-rw-r--r-- 1 chancel chancel 4  9月  6 12:03 123.txt
-rw-r--r-- 1 chancel chancel 6  9月  6 12:07 hello.txt

# chancel @ chancel-cp in /tmp/stash on git:master x [12:07:58] 
$ git stash pop
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   hello.py
    new file:   hello.txt

Dropped refs/stash@{0} (172bdcff963c2786becbb9acd526d968b279b3e0)

# chancel @ chancel-cp in /tmp/stash on git:master x [12:08:02] 
$ ll
total 12K
-rw-r--r-- 1 chancel chancel  4  9月  6 12:03 123.txt
-rw-r--r-- 1 chancel chancel 18  9月  6 12:08 hello.py
-rw-r--r-- 1 chancel chancel  6  9月  6 12:07 hello.txt

Develop Base Git 2019-10-16 17:48:46

Git - 不追踪文件变更

Git根目录下创建.gitignore文件,使用如下语法进行填写即可

# 过滤文件
/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件

# 添加文件
!*.zip
!/mtk/one.txt

如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

Develop Base Git 2019-10-12 14:20:29

Git - 分支meger与rebase的区别

meger与rebase工作场景相似,都是从一个分支获取另外一个分支的提交并合并到当前分支,但他们有细微的差别

meger rebase
创建新Commit ×
保留各个分支commit历史 ×
冲突文件需要重新添加 ×

合并时发现冲突

meger

  • 修改冲突文件
  • git commit

rebase

  • 修改冲突文件
  • git add [files]
  • git rebase --continue(或git rebase --skip)

Develop Base Git 2019-09-24 14:11:47

1 of 1 | A total of 8