结合工作经验,谈谈对使用到的git命令。

331 阅读6分钟

1.背景:

  • git clone

当你接到一个需求的时候,并确定下来它在哪个远程的repo时,你首先要做的是,从远程的仓库中拉公司开发分支中代码下来,当你从新分支拉代码下来会创建本地仓库的同名分支,并建立链接,也叫追踪关系,然后你在本地进行开发,这个步骤用到的git clone命令

  • git clone 实际上是一个封装了其他几个命令的命令。 它创建了一个新目录,切换到新的目录,然后 git init 来初始化一个空的 Git 仓库, 然后为你指定的 URL 添加一个(默认名称为 origin 的)远程仓库(git remote add),再针对远程仓库执行 git fetch,最后通过 git checkout 将远程仓库的最新提交检出到本地的工作目录。

2.完成需求

  • git branch,git checkout

此时你应该在开发分支上,去创建自己的需求分支feature/XXXX, 使用到的是git checkout -b 命令,git branch 创建新分支,注意,在哪个分支上使用的这条命令意味着和哪个分支上的代码一致,git checkout 命令用来切换分支,或者检出内容到工作目录。

  • git add,git commit

此时你的需求写完了或者完成了一部分想先commit一部分代码,你要去使用git add 命令

git add 命令将内容从工作目录添加到暂存区,以备下次提交。 当 git commit 命令执行时,默认情况下它只会检查暂存区域,因此 git add 是用来确定下一次提交时快照的样子的。一般我不会使用这行命令,而是直接通过操作vscode的分支来添加到暂存区,方便你撤销修改,退出暂存区,对比文件的变化

git commit 命令将所有通过 git add 暂存的文件内容在数据库中创建一个持久的快照,然后将当前分支上的分支指针移到其之上。

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。可以使用git reset --mixed HEAD~来撤销上一次的commit,它依然会撤销一上次 提交,但还会 取消暂存 所有的东西。 于是,我们回滚到了所有 git add 和 git commit 的命令执行之前。可以在vscode上去取消上一次提交,类似于上面的命令

git rebase -i master 可以操作之前提交过的commit 具体操作可以看另外一个文章

  • git reset

reset 做的第一件事是移动 HEAD 的指向。 这与改变 HEAD 自身不同(checkout 所做的);reset 移动 HEAD 指向的分支。 这意味着如果 HEAD 设置为 master 分支(例如,你正在 master 分支上), 运行 git reset 9e5e6a4 将会使 master 指向 9e5e6a4。 提示:如果将更改提交到错误的分支,请使用命令面板(Ctrl + Shift + P)中的Git:撤消上一次提交命令来撤消提交。git reset --soft HEAD~3撤销上3次的提交

3.在开发过程中,有时候会用到命令

  • git status,git log ,git cherry-pick

git status 命令会显示工作区及暂存区域中不同状态的文件。 其中包含了已修改但未暂存,或已经暂存但没有提交的文件。 在一般的显示形式中,它会给你一些如何在这些暂存区之间移动文件的提示。

git log 命令用来展示一个项目的可达历史记录,从最近的提交快照起。 默认情况下,它只显示你当前所在分支的历史记录,但是可以显示不同的甚至多个头记录或分支以供遍历。 此命令通常也用来在提交记录级别显示两个或多个分支之间的差异。

git cherry-pick 命令用来获得在单个提交中引入的变更,然后尝试将作为一个新的提交引入到你当前分支上。 从一个分支单独一个或者两个提交而不是合并整个分支的所有变更是非常有用的。在某个分支上使用git cherry-pick e43a6将其他分支的提交合并到master分支上

4.提交代码

  • git push

git push 命令用来与另一个仓库通信,计算你本地数据库与远程仓库的差异,然后将差异推送到另一个仓库中。 它需要有另一个仓库的写权限,因此这通常是需要验证的。此时你的本地创建的分支并没有远程建立链接的分支,所以中间还需要 git branch -u origin/serverfix跟踪上游分支

5.解决冲突

  • git merge,git pull

当你提交上去的分支,要合到develop分支中的时候,有时候因为你的需求所耗时间太长,导致其他同事提交了代码到develop分支上,首先你需要切换到develop分支上使用git pull,把最新的提交拉下来,然后切回自己开发分支使用git merge,这是你需求要去解决冲突,如果在合并的时候你你不知道怎样解决冲突,可以使用 git merge --abort中断合并,最后有了主意再去合并代码,解决好之后再去提交代码,并合并到develop分支上,开发完成,

使用这时会产生冲突,首先要把自己的修改暂存起来,在自己的需求分支上,使用git stash push命令,把改动暂存起来,git stash 命令用来临时地保存一些还没有提交的工作,以便在分支上不需要提交未完成工作就可以清理工作目录。 git merge 工具用来合并一个或者多个分支到你已经检出的分支中。 然后它将当前分支指针移动到合并结果上。

  • git pull 命令基本上就是 git fetch 和 git merge 命令的组合体,Git 从你指定的远程仓库中抓取内容,然后马上尝试将其合并进你所在的分支中。

6.切换到别的分支紧急开发

  • git stash

这个时候你现在的需求已进过半,但你现在又要去背的分支上紧急开发,这是你的选择有将改变做一次commit,这个就不提了,另一个是你可以暂存起来,git stash 命令用来临时地保存一些还没有提交的工作,以便在分支上不需要提交未完成工作就可以清理工作目录。git git stash push放入git栈中,git stash pop弹出git栈,并删除在栈中的数据,git stash list查看git栈的具体情况