Git命令补充与rebase操作

git知识补充

1
2
3
//从 Git 仓库的索引(暂存区)中移除一个文件,但不删除工作目录中的文件。
//这个命令常用于取消对文件的跟踪,同时保留文件在本地。
>git rm --cached <file>

修改提交的描述

1
2
3
4
>git log
>git commit --amend -m "New commit message" //修改最近一次提交
//别名设置(将add设置别名 a) 或者直接在.gitconfig文件中直接添加(git全局配置)
>git config --global alias.a add

.gitconfig文件中直接添加(git全局配置)

1
2
3
[alias]
a=add
c=commit

系统别名定义,git全局命令,文件.bash_profile

1
2
3
4
5
6
alias gs="git status"
alias gc="git commit -m"
alias gl="git log --graph --pretty=format:'%Cred%'"
alias gb="git branch"
alias ga="git add ."
alias go="git checkout"

git branch ask //创建分支ask

//删除分支ask,内容若有修改提交,切换master删除ask分支,会提示未合并master,不能删除

git branch -d ask

git branch -D ask //强制删除分支

git checkout -b ask //创建并切换到ask

git branch --merged(已合并分支) //检查master分支的合并情况(指针在master)

git branch --no-merged(未合并分支)

git pull origin ask:ask //拉取远程分支master和ask

git push origin --delete ask //删除远程分支

git branch -d ask//删除本地分支

冲突:

master分支上创建ask分支和bbs分支,两分支同时对xx.php文件进行修改,切换到master分之后合并bbs分支,自动合并提交,合并ask分支,产生冲突(文件基线已经变了(提交点)),需要打开该文件(文件内容显示两分支内容,调整——调整共同的基线),手动提交历史树。

暂存区:

文件开发一半,无法提交,但需要切换其他分支怎么办?

git stash(存储状态,需要在add之后才可使用),而后可以切换分支

git stash list(存储列表)

1
stash@{0}:WIP ...

git stash apply stash@{0}(恢复暂存区stash@{0},无stash@{0}则默认最新的stash@{0})

git stash drop stash@{0}(删除暂存区状态stash@{0})

git stash pop(恢复并删除暂存区状态stash@{0},最新的存储状态)

标签

git tag [v1.0] (无【】则为显示标签列表) 标签是稳定的代码才能打上

开发好后,发布代码,生成zip压缩包。(master分支的所有代码)

git archive master --prefix=‘cms/’ --forma=zip > cms.zip

master:分支名

prefix:压缩后文件名

forma:后缀

Rebase(本地rebase)

master分支上创建ask分支,master分支本身提交代码,导致master像前移动,切换master合并ask时会弹出窗体合并消息,日志上产生新的合并消息,而不是快速合并,多出一个合并的分支

看图,以时间为轴

期望的合并状态

rebase可理解为replace base

master日志中只有master的提交记录,ask日志中有master的提交记录(只包含创建ask时master的提交点)

在ask分支:git rebase master 在ask日志中插入最新的master提交,使原来的ask提交往 后移动

ask提交后 git rebase --master,这样原本的提交不会丢失,保证了主分支的干净(不保证不冲突)