1. 基本操作
- 代码上传前记得忽略不必要的文件,包括
package-lock.js、.git等 - 查看配置信息:
git config -l - 查看远程仓库:
git remote / git remote -v - 查看远程分支:
git branch -r
2. 合并远程仓库代码并提交的步骤
git add .
git commit -m "" / git commit --amend //修补式提交,记得把#去掉
git pull --rebase //衍合远程最新代码,若 pull 时没有加上 --rebase 选项,将导致当在拉取上游更新时产生合并提交,合并提交不会被 Gerrit 接受
或(如果要拉取远程的某个提交,使用cherry-pick)
{
git status -s// 文件名前面显示 UU 的就是未解决冲突的文件
git add 冲突文件 # 添加修改后的文件到缓存区
git commit -a --amend
git rebase --continue || git merge --continue # 继续rebase或者merge
git log # 如果rebase成功,表示冲突已解决,此时可以查看log
git commit --amend # 修改最后一次提交,包括文件与注释
}
git push origin HEAD:refs/for/master
假如评审未通过,被打回修改后,再次提交时忘了在
git commit添加--amend参数,导致新生成了一个评审任务。这时的处理方式如下:首先,进入评审任务页面,点击 Abandon 按钮放弃此变更;然后,依次执行git reset --soft HEAD^和git commit --amend,再重新 push
若在gerrit上点击submit按钮之后发生冲突
git pull --rebase # 同步代码,如果没有提示冲突,直接跳到最后一步 push
git status -s
# <编辑冲突文件>
git commit -a --amend
git rebase --continue
git push origin HEAD:refs/for/master
3. 远程与本地
3.1 将本地分支推送到远程指定分支上
// git push origin <本地分支名>:<远程分支名>
// git push origin HEAD:refs/for/<branch-name>
git push origin HEAD:refs/for/master
3.2 将远程指定分支拉取到本地当前分支上(一般用cherry-pick)
git clone -b dev 代码仓库地址 (dev是分支名称)
git pull origin <远程分支名>
3.3 在本地新建分支并跟踪远程指定分支
git checkout -b local_branch_name origin/branch_name
3.4 删除远程分支
推送一个空分支到远程分支,其实就相当于删除远程分支:
$ git push origin :localbranch
也可以使用:
$ git push origin --delete localbranch
3.5 refs/for
git push <remote 名字> <本地分支的名字> : <远程库的名字>
git push origin HEAD:refs/for/master
git push 推送
origin: 远程的库的名字
HEAD: 是一个特别的指针,它是一个指向你正在工作的本地分支的指针,可以把它当做本地分支的别名,git这样就可以知道你工作在哪个分支
refs/for: 意义在于我们提交代码到服务器之后是需要经过code review之后才能进行merge的
3.6 amend已推送到远程的非最近一个提交
步骤:
1.使用 git rebase -i [commit-id] 修改本地HEAD指针指向 // commit-id为要修改提交的上一个提交
2.将要修改提交前面的 pick 改为 edit
3.修改代码
4.git add .
5.git commit --amend
6.git rebase --continue
4. git cherry-pick
git cherry-pick可以理解为”挑拣”提交,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就要使用git cherry-pick了
- 用法:
git cherry-pick [<options>] <commit-ish>...
常用options:
--quit 退出当前的chery-pick序列
--continue 继续当前的chery-pick序列
--abort 取消当前的chery-pick序列,恢复当前分支
-n, --no-commit 不自动提交
-e, --edit 编辑提交信息
git cherry-pick A^..B //[A,B], commit time:A<B, 如果AB顺序出错,则报错error: empty commit set passed
git cherry-pick A..B //(A,B], commit time:A<B
- 举栗:切换到B分支上合并A分支上的commit
1)git checkout B
2)git cherry-pick -n commitId
3)git status //查看是哪些文件发生冲突, 红色的为有冲突的文件
4)解决冲突
5)git add .//git add相当于标记为已解决
6)git cherry-pick --continue
5. 合并commit
6. git stash
参考文章:zhuanlan.zhihu.com/p/364339115
使用流程:
- 将修改保存到分支 A
- 运行
git stash- 签出分支 B
- 修正 B 分支的错误
- 提交并(可选)推送到远程
- 查看分支 A
- 运行
git stash pop来取回你的暂存的改动
- git stash pop 弹出最近一次stash的内容
- git stash list 查看当前stash的所有内容
- git stash clear 清除所有stash的内容
7. git清除缓存
.gitignore 文件用来指定需要排除在版本管理之外的文件或目录。最近发现一个问题,如果某个文件或文件夹之前是在版本管理内的,并且进行过提交,事后想加入 .gitignore 中,并不生效。
解决方法:清空 git 本地的缓存再提交一次
git rm -r --cached .
git add .
git commit -m "fixed untracked files"
8. 导出git log日志
xxx.log是可自定义的名称,栗子中的目录:C:\Users\username\Desktop
- 格式化版
git log --pretty=format:"%ai , %an: %s" --since=“100 day ago” >> ~/Desktop/commit.log
- 详细版
git log --since ="180 day ago" >> ~/Desktop/commit2.log
9. 撤销提交
使用:git reset --soft HEAD^ 或 git reset --soft HEAD~1 ,
如果想撤回两次commit 使用git reset --hard HEAD~2
- --hard表示:删除工作空间改动代码,撤销
commit,撤销git add .,完成这个操作后,就恢复到了上一次的commit状态 - --soft表示:不删除工作空间改动代码,撤销commit,不撤销add,被撤销的commit修改会放回暂存区中 (优先选择)
- --mixed表示:默认参数,不删除工作空间改动代码,撤销commit,并且撤销add,
git reset --mixed HEAD^和git reset HEAD^效果是一样的。
10. git push 提交某一个commit
步骤:
- 基于远程工作分支develop的最新节点创建并切换到新的分支test
git checkout -b test remotes/origin/develop
- 将我们想要单独推送的提交commit1,cherry-pick到当前分支test1上
git cherry-pick commit1
- 直接push到工作分支develop
git push origin HEAD:refs/for/develop