git bash 常用命令
clone代码
git clone xxxxxx.git
本地修改,提交
(1)查看当前代码的修改状态,执行命令:git status
(2)将修改的文件提交到本地暂存区,执行命令:git add filename 或者将所有修改过的工作文件提交暂存区,执行命令: git add .
(3)将暂存区的修改文件提交到本地git库中,执行命令:git commit后输入commit message,或者git commit -m “引号内输入commit message”
(4)将提交的修改推送到远端,执行命令:git push <远程主机名> <本地分支名>:<远程分支名>(例子中使用的是默认的远端origin,分支master)
代码更新
git pull origin master
Master也可以替换成其他远端库分支。
线下解决合并冲突
(1)将项目主库分支同步到本地
git pull git@rnd-isourceb.huawei.com:20150826/test.git master
(2)打开有冲突的文件
vi “Your conflict file”
1、打开文件后,会出现以下内容,<<<<<<<HEAD与=======之间的内容是当前分支的,=======与>>>>>>>之间的内容是pull过来的内容。解决冲突的办法也就是两者选其一或者整合到一起。
(3)在解决了所有文件里的所有冲突后,需要运行以下命令,推送到远程仓。
git add .
git commit -a
git push origin master
查看所有分支
git branch -a
切换到某个分支下
git checkout “分支名”
git checkout -b “新分支名” 从主分支创建新的分支并切换到该分支
代码回退
(1)回退整套代码到最近一次提后的状态
git reset --hard HEAD 参数 --hard表示删除自该次提交后所有的修改记录(未跟踪文件除外)
git reset --soft HEAD 回退代码到指定的某次提交状态
(2)撤销已暂存的文件
git reset HEAD <文件路径> 撤销已经修改的文件
git checkout --<文件路径> 撤销未跟踪文件
rm <文件或文件夹路径> 如果加上-f,那么表示强制;-r递归的删除目录及子目录内容
(3)清楚所有未跟踪文件
git clean -dxf清除所有未跟踪文件,包括纳入.gitgnore中的文件
二分法排查是哪个分支引入的问题,
使用命令: git bisect 55d5899b15b50e13c2bdfd6903943b8246fd8393 b63e626ffc282bb0c73c147d05b35b59e64a1273
具体使用教程 http://www.ruanyifeng.com/blog/2018/12/git-bisect.html
教程总结
(1)找到一个未出错的老版本的cash
(2)git bisect start [终点cash] [起点cash] 该命令会自动切换到两个cash的中点
(3)如果对应的版本有问题,使用git bisect bad标记;否则使用 git bisect good 标记
git blame [filename]
追溯一个指定文件的历史修改记录
解决冲突的几种方式 https://www.cnblogs.com/zjfjava/p/10280247.html
(1)主要是项目中的文档目录,看的时候可能多了些标注,现在远程文档更新,本地的版本已无用,可以强拉
git fetch --all
git reset --hard origin/dev
git pull
(2)未commit先pull,视本地修改量选择revert或stash
将相同仓库中的dev分支中的commit迁移到release分支的操作需要 git cherry-pick 命令,具体操作如下:
1)找到需要合入的额commitID
2)确定需要合入到的分支名:例如分支名为release-2.1.0。执行如下命令切换到release-2.1.0分支
git checkout release-2.1.0
3)执行如下命令,将对应commit拉取到release-2.1.0分支
git cherry-pick [commitID]
4)推送到远程仓
git push
使用现有分支创建新分支:
git checkout -b [NewBranchName] origin/ExistedBranchName
在push之前,检查自己的commit,
git show
git log -n 1
如果提交的commit信息有问题,可以通过下面命令修改
git commit --amend
在commit之前,通过如下命令,检查自己的代码
git diff --staged
如果在提交commit之前,master分支已经发生了更新,需要执行变基操作
1)git rebase -i origin/master
2)打开editor,选择(pick)/删除(delete)/修改(edit)/重排序(re-order)需要提交的commits
3) git push -f
git 合并commit操作 https://www.jianshu.com/p/964de879904a
git rebase 合并分支操作步骤
git checkout dev_12x
git pull
git checkout your_branch
git rebase dev_12x
git push -f
删除分支操作
(1)本地分支:
git branch -d [branchName]
(2)远端分支:
git push origin --delete [branchName]
如何生成patch和正确的打patch
生成patch:
1)两个commit间的修改(包含两个commit)
git format-patch <r1>...<r2>
exg:
git format-patch d77aaac74845435744c49ae65511d9e1be79ed5c...046ee8f8423302f5070ca81b4e246516e919cd7a -o patch
2)单个commit
git format-patch -1 <r1>
3)从某个commit以来的修改(不包含该commit)
git format-patch <r1>
打patch:
1)检查patch是否能应用成功:
git apply --check patch-name
2)打patch:
git am patch-name
3)若打patch失败,可以按照此操作来执行:https://zhuanlan.zhihu.com/p/104055075
修改commit作者和邮箱:
git commit --amend --author="NewAuthor <NewEmail@address.com>"
git clone 报错:error: RPC failed; curl transfer closed with outstanding read data remaining 的解决方案:
(1)git config --global core.compression 0
(2)git clone --depth=1 <url>
(3)cd <shallow cloned project dir>
(4)git fetch --depth=N, with increasing N // eg: N= 100, 500, 1000...
(5)git fetch --unshallow
git remote 使用(一般rebase使用)
git remote add remote-name URL // 添加新的远程仓库,并命名为remote-name
git fetch remote-name // 通过名称:remote-name拉取远程分支
git rebase remote-name/branch-name // 变基操作,同步远程分支的代码