创建与克隆
git init
: 在当前目录下创建一个新的Git仓库。git clone <url>
: 从远程仓库地址克隆一个项目和它的整个版本历史。
基本快照制作
git status
: 查看哪些文件处于修改状态(已修改但未提交),哪些已暂存待提交。git add <filename>
或git add .
: 将文件改动添加到暂存区,.
代表添加所有更改的文件。git commit -m "commit message"
: 将暂存区域的文件提交到仓库,并附上一条提交信息。git diff
: 查看未暂存的文件更新了哪些部分。git diff --staged
或git diff --cached
: 查看已暂存的将要包含在下次提交里的内容。
分支与合并
git branch
: 列出本地所有分支,当前分支前会有一个*
标记。git checkout <branch-name>
: 切换到某个分支。git checkout -b <new-branch>
: 创建并切换到一个新分支。git merge <branch>
: 合并指定分支到当前分支。git branch -d <branch-name>
: 删除本地分支。
提交历史
git log
: 显示当前分支的版本历史。git log --follow [file]
: 显示某个文件的修改历史。git blame [file]
: 以列表形式查看某个文件的详细修改历史。
撤销更改
git restore <file>
: 恢复工作目录中的文件到最后一次git commit或git add时的状态。git reset --hard HEAD
: 重置到最后一次提交的状态,舍弃所有工作目录中的更改。git commit --amend
: 修改最后一次提交。
远程操作
git fetch [remote-name]
: 从远程仓库获取数据到本地,不自动合并。git pull [remote-name] [branch-name]
: 从远程仓库拉取数据并自动尝试合并到当前分支。git push [remote-name] [branch-name]
: 将本地分支的更新推送到远程仓库。git remote -v
: 查看远程仓库地址的详细信息。git remote add <remote-name> <url>
: 添加一个新的远程仓库别名。
标签
git tag
: 列出所有tag。git tag <tagname>
: 创建一个新的tag。git push [remote-name] [tagname]
: 推送一个tag到远程仓库。
Git的cherry-pick
命令允许你选择一个或多个在其他分支上的提交,并将它们复制到你当前的工作分支上。这是一种将特定提交从一个分支转移到另一个分支的方法,而不是合并整个分支。
以下是cherry-pick
命令的一些基本使用场景和步骤:
单个提交的Cherry-Pick
假设有一个提交在分支feature
上,其提交哈希为abc1234
,你想要将这次提交应用到当前所在的main
分支上。
-
首先切换到目标分支:
bashgit checkout main
-
执行
cherry-pick
命令:bashgit cherry-pick abc1234
如果cherry-pick
操作成功,那么分支main
现在会包含一个新的提交,内容与feature
分支上的abc1234
提交相同。
多个连续提交的Cherry-Pick
如果你想要复制一系列连续的提交,可以指定这些提交的范围。
假设你要将feature
分支上从abc1234
到def5678
(包括这两个提交)之间的所有连续提交复制到main
分支上。
-
切换到目标分支:
bashgit checkout main
-
使用范围进行
cherry-pick
:bashgit cherry-pick abc1234^..def5678
注意:符号^
表示包括abc1234
在内的提交。
多个非连续提交的Cherry-Pick
如果你想要复制几个非连续的提交,可以将每个提交的哈希值依次列出。
假设你想要复制feature
分支上的三个不连续的提交abc1234
、def5678
和ghi9012
到main
分支上。
-
切换到目标分支:
bashgit checkout main
-
逐个或一起执行
cherry-pick
指令:bashgit cherry-pick abc1234 def5678 ghi9012
解决冲突
有时候,在执行cherry-pick
的过程中可能会发生冲突,因为当前分支上的文件状态可能与要复制的提交中的改动发生了冲突。
当冲突发生时,git会停止cherry-pick
操作,等待你手动解决冲突。这时你可以:
-
打开冲突的文件,找到冲突部分(通常由
<<<<<<<
,=======
和>>>>>>>
标记)。 -
编辑文件来解决冲突,删除标记,并保留你想要的代码变更。
-
添加解决后的文件到暂存区:
bashgit add <resolved-file>
完成以上步骤后,你可以用下面的命令继续cherry-pick
过程:
bash
git cherry-pick --continue
如果你决定不进行cherry-pick
,可以用以下命令取消操作:
bash
git cherry-pick --abort
掌握cherry-pick
能够让你灵活地选择特定的提交进行工作,而无需合并整个分支。