git命令的使用

git命令的使用
乐常用命令
git clone - 从远程仓库克隆代码
git add - 添加文件到暂存区
git commit - 提交代码到本地仓库
git push - 推送到远程仓库
git pull - 拉取远程仓库更新
git checkout - 切换分支
git branch - 新建/列出分支
git merge - 合并指定分支
git log - 查看提交记录
git status - 查看文件状态
git diff - 比较差异
git reset - 回退版本
git revert - 撤销提交
git tag - 给指定提交打标签
git stash - 暂存当前进度
git rm - 删除文件
命令详解
git commit –amend
用来修改最后一次提交记录,示例如下
- 修改最近一次的提交记录历史
1 | git commit --amend "new commit history" |
- 有新变动产生的文件
1 | git add . |
- 修改提交时间
1 | git commit --amend --date="Fri Jan 1 00:01:00 2021 +0800" |
–no-ff
它是git merge命令的一个选项。它表示禁用快进(fast-forward)合并。
默认情况下,当执行git merge命令时,如果要合并的分支没有作任何新的提交,那么Git会直接将当前分支指向要合并的分支,而不会创建新的合并提交。这就是快进合并。快进合并会导致分支历史变得线性,并且合并后的分支结构可能会丢失。
在实操中过多的历史提交对于分支管理是不必要的操作,而使用--no-ff选项进行合并时,Git会创建一个新的合并提交,无论要合并的分支是否有新提交。这样可以保留分支的结构,每个分支的变化都可以跟踪到。
使用--no-ff选项的合并命令示例:
1 | git merge --no-ff branch-name |
使用这个命令合并之后,新的分支将产生一个总的合并历史,记录合并的操作和相关的提交信息,这可以更清楚地表示分支之间的合并历史。
解决冲突
Git pul时出现的故障
出现了以下错误:error: Your local changes to the following files would be overwritten by merge,这个错误一般是本地有修改时拉取了远程分支,导致本地分支和远程分支出现了冲突。需要先解决冲突后再进行合并,解决方案是采用git stash命令。如果本地没有需要保存的内容可以直接丢弃本地内容,直接拉取分支。
- 首先将修改内容暂存到暂存区中
1 | git stash |
- 拉取远程分支到本地
1 | git pull |
- 将暂存区的内容释放,若有冲突首先解决冲突
1 | git stash pop |
如果暂存区中保存了多个记录,pop将按照栈先入后出的顺序弹出。也可以不弹出暂存区内的内容,但是先应用到本地分支
1 | git stash apply |
- 放弃指定的暂存区
1 | git stash drop *** |
本地分支和远程分支都有提交记录导致冲突
- 首先拉取远程分支的提交记录
1 | git fetch |
- 此时本地将共存远程分支和本地分支的所有内容,对当前分支内容采用合并命令
1 | git merge |
此时会出现merge confict的错误
1 | Auto-merging merge.txt |
使用git status查看文件的状态,在都修改的文件上会出现both modified的标注,同时打开这个文件在修改的地方会出现以下内容
1 | 这是第一行,这行不会被修改 |
这些记号是标记冲突内容的分隔线,解释如下:
<<<<<<< HEAD和=======之间的内容:是master分支修改的内容(准确来说是HEAD指针指向的分支修改的内容);=======和>>>>>>> new_branch之间的内容:是new_branch分支修改的内容;分割线之外的内容:是两个分支都没有改动的内容
要解决这个冲突只需要删除不需要的内容即可,同时出现的特殊符号也需要全部删除。
- 完成以上的内容后,按照新的commit记录进行操作即可
1 | git add 文件 |
无法提交仓库
问题描述:
第一次从gerrit仓库clone代码之后,对开发内容进行commit,这个时候直接进行push操作,可能会出现push失败的情况,如下面的提示
问题解决:
这个错误产生的原因是因为commit记录没有自动生成change-id,要想push代码成功,首要任务是解决change-id的生成。change-id由commit-msg文件自动生成,
解决方案在错误提示中已经很明确了,按照操作即可修订错误。
- 复制命令
1 | f="$(git rev-parse --git-dir)/hooks/commit-msg"; curl -o "$f" http://gerrit.it.chehejia.com:8080/tools/hooks/commit-msg ; chmod +x "$f" |
- 重新commit加入changId
1 | git commit --amend --no-edit |
- 检查是否生成changId
1 | git log |
问题
前端项目每次都需要重新生成change-id
husky与gerrit冲突,导致每次都需要重新生成change-id,指定路径之后即可解决
执行下面的命令
1 | git config core.hooksPath '.git/hooks' |
项目在commit的时候总是无法生成changeId,导致无法推送到远程,原因和上面的一样,需要指定git hooks









