git clone
拉取远程项目到你本地
git clone '你的项目地址'
git add
添加代码到本地缓存
缓存全部
通过 . 占位符,代表提交任意文件,适合不必细分的时候
git add .
指定添加缓存
可以指定目录、指定文件提交,适合小范围或固定文件
git add /对应目录路径/
git add /对应文件路径/
git commit
给缓存的代码打上描述。这是必须做的,每次 git add 后,必须 git commit '你的描述',否则无法推送代码
git commit "console-log"
git push
将本地缓存代码推送到远程分支
git push // 默认推送到当前分支关联的远程分支
git push origin xx // 通过origin指定推送到某个远程分支
git fetch
从远程获取最新版本到本地,不会自动合并分支
git fetch 分支名
git pull
拉取远程分支代码,并且自动 merge 到当前分支,风险较大,需要注意解决冲突
git pull的默认行为是git fetch + git merge
git pull --rebase则是git fetch + git rebase.
git pull // 默认拉取当前分支关联的远程分支
git pull origin xx // 通过origin指定拉取某个远程分支代码到本地分支
git log
查看项目历史的提交信息

git status
git status命令用于显示工作目录和暂存区的状态。使用此命令能看到哪些修改被暂存了, 哪些没有, 哪些文件没有被Git tracked。git status不显示已经commit到项目历史中去的信息。
一般可以用来排查代码冲突,未提交的文件等

git stash
适用场景:
- A分支没有完成的代码,但是要去修改B分支的代码
- 想保留代码,但是又不想推送到远程分支
将代码缓存到本地,类似 git commit 但又有区分;通过git commit提交代码,在本地栈会又提交记录,这样导致log上会有大量不必要的记录。
而 git stash 不会产生提交记录,通过 git stash缓存

git stash list 可以查看 git stash 缓存列表
可以看到有3条缓存记录,因为修改了3个页面

git stash apply恢复缓存记录

实际应用中推荐给每个stash加一个message,用于记录版本,即git stash save取代git stash。如:
git stash save "添加console.log"


将缓存的记录重新释放有两个方式,git stash apply 和 git stash pop 都可以将当前分支的最后一次缓存的内容释放出来。
git stash apply 和 git stash pop 的异同
- 相同:都会把最后一次缓存的内容释放出来
- 差异:通过 pop 释放,会把对应的储存记录从list中删除,而apply不会
释放指定内容,使用git stash apply stash@{x}或 git stash pop stash@{x},可以将编号x的缓存释放出来
git stash apply stash@{x}
git stash pop stash@{x}
使用 git stash clear清除记录列表 ,注意会把修改的文件记录一并清除,请注意代码将代码提交后再清除
git stash clear
当然也可以使用git stash drop移除指定的stash栈
git stash drop stash@{x}
查看指定stash的提diff
git stash show
gie rebase 与 git merge
git rebase
将指定分支合并到 master
git rebase 分支名
如果有合并冲突,使用以下三种方式处理这些冲突:
git rebase --abort 会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃;
git rebase --skip 则会将引起冲突的commits丢弃掉(慎用!!);
git rebase --continue 合并冲突,结合"git add 文件"命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。(fix conflicts and then run “git rebase --continue”)
git merge
合并两个分支,将指定分支上所有内容合并到当前分支
git merge 分支名
两者区分
- git merge 会将分支的提交按照提交时间进行排序,并且会把最新的分支commit合并成一个commit。最后的分支树呈现非线性的结构。每次都有提交记录;
- git reabse 将dev的当前提交复制到master的最新提交之后,会形成一个线性的分支树。不会有提交记录;
使用场景
git reabse 适合个人分支开发,分支树单一简洁。缺点:不容易追溯问题,结构单一。
git merge 适合公共分支开发,在排查问题或者追溯需求时,会很方便。结构清晰,提交记录清晰
如果是公司项目,一整个团队开发,需要把代码合并到主分支时,要用 merge,不要用 reabse!!!
⚠️不要在公共分支使用rebase命令,会污染公共分支,这样公共分支就会存在你的commit记录,别人拉取的时候会存在你的最新的commit记录。
本地分支
查看本地分支
包括本地分支、远程分支
git branch
新建本地分支
新建分支
git branch 分支名
新建并切换
git checkout -b 分支名
拉取远程分支,并在本地新建一个分支
git checkout -b 本地分支 origin/远程分支
本地分支和远程分支建立映射关系的作用
git branch --set-upstream-to origin/远程分支名 本地分支名
查看分支关联关系
通过 git branch -vv 可以查看本地分支与远程分支的关联关系
git branch -vv
更新本地远程分支
新建分支时,想基于远程仓库的某个分支去建,但是本地没有这个分支记录,可以通过 git fetch origin去更新本地的分支列表
git fetch origin
// 或
git remote update --p
代码回滚
git reset
软回滚
软回滚的作用,是将最近的 commit 记录回顾,并且保留代码变更内容;适合误提交的场景!
git reset --soft HEAD^
强制回滚
撤销最近的提交,并撤销所有更改(包括工作区)
--hard 选项会丢弃所有未提交的更改,所以使用 --hard需要注意,是否不需要保留变更记录
git reset --hard HEAD^
git revert
撤销某个或多个 commit 提交,并生成一条记录
主要应用场景,撤销commit tree的某个节点,不影响到在这之后提交的 commit
git revert <commit-hash>
使用 git revert 会生成一条记录,所以需要编辑提交信息,编辑完后需要 :wq 退出保存
git reflog
reflog 记录了所有 commit 操作记录,包括 reset --hard后的记录,它可以用来找回丢失的commit记录
git reflog
commit 复制
cherry-pick
将已经提交的 commit ,复制出新的 commit应用到分支;适用于,部分代码抽离的场景。
例如你当前开发的分支混了两个版本的代码,当前版本只需要上部分代码,就可以使用 git cherry-pick 来抽离需要上线的 commit
git cherry-pick <commit-hash>
多个 commit 复制
git cherry-pick commit1 commit2
cherry-pick 代码冲突
使用 cherry-pick 复制时,若遇到代码冲突,git 会停止复制行为,并且抛出警告,若用户想要继续进行下去,需要告诉 git 继续操作
git cherry-pick --continue
继续复制 commit 操作,尽管会有代码冲突
git cherry-pick --continue
git cherry-pick --abort
放弃复制 commit 操作,回到操作前的样子,即放弃本次 cherry-pick复制
git cherry-pick --abort
git cherry-pick --quit
退出复制 commit 操作,但是会保留已复制成功的 commit
git cherry-pick --quit