Post

Git常用指令

TODO here

[ ] 修改这篇笔记的格式

  1. git add 文件名 含义:从工作区添加指定文件到暂存区 注意:若多次add同一个文件,commit时只添加最后一次add的文件

  2. git commit -m "xxx" 含义: 将暂存区所有文件添加到本地仓库,”xxx”为备注名,注意备注名需要和仓库其他备注名区别开 加-m是指直接在后面写上版本的注释,不加-m的话会用一个vim打开文件让你写入massage,有未追踪的文件将会失败,需要add加入暂存区 git cherry-pick [commit-id] 这个是复制一次commit提交,然后在当前分支上重新提交一遍;也就是将指定commit的合并到当前分支 git commit –amend 该指令可以快速将当前文件修改合并到最新的commit,不会产生新的commit。在提交commit后发现还有部分文件修改忘记提交了可以使用该命令

git push 含义:将文件添加到远程仓库 git push origin 分支名 可以将推送当前本地分支添加到指定的远程分支

git rebase 含义:合并前两个历史提交

git checkout 含义:切换分支,若使用git checkout -b [new-branch-name] 为创建并切换分支 最好加– [file-name],没有的话就把它当作切换分支看待,切换到另一个分支了,如果没有这个分支也会把它当作文件执行。

git diff 含义:工作区(work dict)和暂存区(stage)的比较 git diff HEAD – . 查看最新本地版本库和工作区所有文件的区别

git reset 含义:回退代码。回退到某个commit_id git reset HEAD [file-name] 对单个文件进行操作 git reset –soft{1}|{2} 其中可选参数soft表示单纯的切换HEAD指向的commit-id 默认值{1}参数表示先执行上面一步,然后再将commit-id里面的内容更新到暂存区 参数{2}表示先执行上面两步,然后再将暂存区内容同步到工作区

git stash 含义:隐藏当前工作的修改 如果不隐藏自己修改的半成品代码,就会发生切换到别的分支后,将然后自己的半成品代码带入其他分支,这样就发生很多不必要的麻烦。 git stash pop 恢复隐藏的工作信息,同时删除隐藏的工作信息,记住一次stash对应一次stash pop,多次stash pop会出现错误

git fetch 含义:拉取远程分支最新的commit到本地仓库的,如:git fetch origin/[branch-name] 注意,多个人更改同一个topic时,需要先stash,再进行fetch,最后再stash pop

几种常见情况处理 都以latest_develop作为主分支为例 添加新代码,提交topic

1
2
3
git add xxxx
git commit -m "xxxx"
git push origin HEAD:refs/for/latest_develop%topic=xxx

添加新代码,提交到相同topic(保持同一个commit)

1
2
3
git add xxxx
git commit --amend # 提交到同一个commit
git push origin HEAD:refs/for/latest_develop # gerrit有commitid,第二次提交建议不添加topic=

rebase最新代码 先commit本地,再rebase

1
2
3
4
git add xxx
git commit -m/--amend
git fetch origin latest_develop
git rebase origin/latest_develop

或者不commit,先stash保存本地代码

1
2
3
4
git stash
git fetch origin latest_develop
git rebase origin/latest_develop
git stash pop

多人共同编写同一个commit,同步他人代码

1
2
3
git stash
git fetch xxx && git checkout yyy # 从gerrit上拉代码,直接在gerrit上复制命令
git stash pop

想创建新commit,但不小心–amend git reset –soft HEAD@{1} # 恢复到commit前状态

cherrypick dev->A->B,B提交的时候不是在dev,而是不小心commit到别的正在开发的功能上,该成dev->B

1
2
3
git log # 记录dev B的commit号
git reset --hard $commit_dev # 回到dev的commit
git cherry-pick $commit_B # 把B的修改加到dev上
This post is licensed under CC BY 4.0 by the author.