Git基本概念
基本工作流程
git add .
:将工作区修改添加到暂存区;git commit -m '...'
:将暂存区修改提交到本地仓库,并添加描述;git remote add origin https://...git
:第一次提交需设置远程仓库地址,以后无需设置;git pull origin branch
:从远程仓库指定分支拉取最新代码;- 处理冲突,然后重新add、commit;
git push origin branch
:向远程仓库推送本地仓库的改动;
撤回或修改
- 撤销上次提交(revert):
git revert HEAD
,加上-n
避免自动commit; - 撤销上次提交(reset):
git reset HEAD
; - 撤回到指定提交(reset):
git reset commit-id
; - 修改commit:
git commit --amend "..."
,假如期间有新的暂存区改动,将合并到一个commit中;
注:reset会丢弃指定id之后的所有commit记录,可能导致本地仓库不能直接push到远程仓库,此时可以加-f强制push,但有风险。
revert/reset
git revert id
,revert只会影响指定id的commit记录,默认会提交一个新的commit,加上-n可以避免该默认行为;git reset --hard id
,Hard模式,指定id之后的所有commit记录都会丢失;git reset
,默认为Mixed模式,指定id之后的commit会放到暂存区;
注:revert后可以直接push,而reset后可能导致本地仓库与远程仓库不一致,须加上-f以强制push;
merge/rebase
git merge topic
对当前分支和topic分支,以及它们的最近共同祖先,进行三方合并;git rebase master topic
将topic分支与master、topic的最近共同祖先进行比较,得到所有临时改动,并重新应用到master分支上;git pull
默认为fetch + merge;git pull --rebase
为fetch + rebase;
Fast-forward:当前分支是合并进来的分支的祖先节点,则二者之间不存在冲突,git直接移动Head指针到最新commit记录上,这称为快进;
注:merge和rebase的结果是相同的,但commit时间线不同,rebase是一条直线,且更简洁;
tag
- 标签列表:
git tag
; - 通配符匹配的标签列表:
git tag -l 'v1.2*'
,-l可替换为–list; - 生成轻量标签:
git tag tag-name
; - 生成附注标签:
git tag -a tag-name -m '...'
,附注标签包含额外信息,且可被GNU Privacy Guard (GPG)签名、校验,以保证标签不被篡改; - 为指定commit生成标签:
git tag tag-name commit-id
; - 删除标签:
git tag -d tag-name
; - 推送标签:
git push origin --tags
;
branch
- 创建并切换分支:
git checkout -b branch-name
; - 创建分支:
git branch branch-name
; - 切换分支:
git checkout branch-name
; - 删除分支:
git branch -d branch-name
;