git命令记录
基本命令
- git checkout branch-name: 将当前分支切换到目标分支。
- git stash: 将当前工作目录和暂存区的修改保存到一个堆栈上,并恢复干净的工作目录。
- git stash pop:将最近一次的stash应用到当前分支,并从stash堆栈中移除。
- git stash list: 查看所有的stash
- git stash apply stash@{n}: 应用特定的stash条目,其中n是stash条目的索引。
- git branch -r --contains commit-hash:会列出包含该提交的所有远程分支。
实践
切换分支
- 查找到分支名字后直接切换
#查看本地所有分支
git branch
#返回:q
#查看当前分支和状态
git status
#将远程分支更新到本地
git fetch
#列出所有远程分支
git branch -r
#切换到一个分支
git checkout <branch_name>
- 若更改还未完成,但需要切换到另一个分支
#stash暂存
git stash
#也可以在stash条目加一个描述,以便以后更容易识别
git stash save "描述"
#切换分支(同上)
#切换完后,恢复之前贮藏的更改
git stash pop
- 若执行完git stash后,还有修改的文件没有暂存起来
#先恢复之前的stash
git stash pop
#暂存包括未跟踪的文件
git stash -u
#也可加描述
git stash save -u "描述"
# 或者,暂存包括未跟踪和被忽略的文件
git stash -a
#可加描述
git stash save -a "描述"
# 切换到目标分支(同上)
# 恢复暂存的修改(在需要的时候)
git stash pop
分析: 在执行 git stash 后,如果还有一个修改的文件没有被暂存起来,有以下几种原因:
-
未被Git跟踪的文件:默认情况下,git stash 只会暂存已经被Git跟踪的文件的修改。未跟踪的文件(即新创建但还没有使用 git add 添加到暂存区的文件)不会被暂存。
-
特定文件被忽略:如果某个文件被 .gitignore 忽略了,git stash 也不会暂存该文件的修改。
-
部分文件暂存:如果你对文件的某部分进行了暂存,而对其余部分没有暂存,git stash 默认会暂存所有已暂存和未暂存的更改,但不会包括未跟踪的文件。
提交到远程分支
- 若远程仓库上有更新分支列表
#拉取远程分支信息
git fetch
#先暂存更改
#再提交更改(提交到的本地仓库)
#将远程分支上的最新更改与本地分支合并(避免推送时产生冲突)
git pull
#将更改推送到远程仓库
git push
git fetch: 获取远程更新,但不合并到当前分支。(fork上可以直接点击fetch )
git pull:获取远程更新并立即合并到当前分支。(fork上可以直接点击pull)
当需要将更改后推送的分支发出合并请求
- 若合并的目标分支在本地是最新状态,则直接push后发出合并请求
- 若合并的目标分支在本地不是最新状态(目标分支有更新,本地落后),则需要merge或者rebase
当需要将特定的提交从一个分支应用到另一个分支
- 使用cherry-pick来实现: 假设在feature分支中有一个提交, 想将其应用到main分支
#切换到feature分支
git checkout feature
#查找feature分支的提交哈希值
git log
#假设日志如下
commit 000001111122222333 #commit行内容为哈希值,复制下来
Merge: 88888999999 aaaaabbbbbb
Author: user@example.com
Date: Tue Aug 31 21:19:41 2021 +0000
#切换到目标分支(即main分支)
git checkout main
#Cherry-pick提交
git cherry-pick 000001111122222333
#若cherry-pick过程中出现冲突,在vscode上编辑有冲突的文件,然后暂存解决完冲突后的文件
#暂存完后,继续cherry-pick
git cherry-pick --continue
#若中途想终止cherry-pick操作
git cherry-pick --abort
从已有分支上拉取一个新分支
- 假设需要从main分支上拉去一个新的分支,名为dev
#切换到已有分支(main分支)
git checkout main
#拉取最新版本
git pull
#从当前分支拉取新分支dev,并切换到新分支
git checkout -b dev
#将本地新建的dev分支push到远端
git push origin dev
#拉取远端分支
git pull
#拉取后会提示没有关联
#将本地分支与远程分支关联
git branch --set-upstream-to=origin/dev
根据commit号查找分支
- 查找本地的分支
git branch --contains <commit_hash>
- 查找远程的分支(Git默认按时间顺序列出分支)
git branch -r --contains <commit_hash>
- 查看特定提交及其相关的提交历史
git log <commit_hash>
在特定的提交上打一个标签(tag),并推送
git tag -a <tag-name> <commit-hash> -m "描述"
#例如git tag -a v1.0.0 aabababb -m "Version 1.0.0 release"
#推送到远程分支
git push origin <tag-name>