git常用的一些功能
- git pull冲突解决
- git提交到评审分支
- git查找每行代码提交记录
- git查看本次某文件里修改的内容
- 撤销已经add,但是没有commit的问题
- git追加上一次提交
- 某次提交合并到其它分支
- 撤销已经commit,但是没有push到远端的文件(仅撤销commit 保留add操作)
- 撤销已经push到远端的文件
- 查看git pull以那个远程仓库为基准
- git pull 仓库指定分支
- 本地分支git pull远程依赖修改
- 设置当前分支的默认推送远端分支
- 查看当前分支的默认推送远端分支
- 删除本地的某次commit
- 想使用某个版本的文件替换当前工作区文件
- 想切到当前分支远程仓库的最新提交
- 给当前项目添加子库
- 拉取有子库的项目
- 删除某次改动
- 对子库的操作
git pull冲突解决
方案一:先把本地修改保存起来,拉完代码后再pop出来解决冲突
1.git stash
2.git pull
3.git stash pop stash@{0}
4.冲突则打开文件差分,改好后git add 本次想要提交的代码,git commit。然后再push到远端。
方案二:手撕冲突
1.git pull之后 出现了mege失败。
2.git status 看看那些文件冲突了
3.打开文件进行修改
<<<<<<< HEAD和=中间的是你自己的代码, ======= 和>>>>>>>中间的是其他人修改的代码自己确定保留那一部分代码,最后删除<<<<<<< HEAD ,= ,>>>>>>>这种标志。
4.修改完git add 修改后的冲突文件。git commit 修改
5.开发完提交代码
git提交到评审分支
git push origin HEAD:refs/for/develop_550_ntg7 -o reviewer=,
git查找每行代码提交记录
git blame -L 100,105 main.cpp
git查看本次某文件里修改的内容
git diff 文件名
撤销已经add,但是没有commit的问题
git reset HEAD
git追加上一次提交
git add 新改动的文件
git commit --amend 加参数 --no-edit 可不进行描述
git push origin 远程仓库
某次提交合并到其它分支
1.找到要合并的 cmmit id
2.切换到要合并的分支
3.git cherry-pick 0fc830ca09a5f24c8eebf8106c35c97eb134bae4
撤销已经commit,但是没有push到远端的文件(仅撤销commit 保留add操作)
1.撤销上一次的提交
git reset --soft HEAD^
2.按照输入的数字撤销输入数字条commit记录
git reset HEAD~提交id
撤销已经push到远端的文件
// 切换到指定分支
git checkout 分支名
// 撤回到需要的版本
git reset --soft 需要回退到的版本号
//提交撤销动作到服务器,强制提交当前版本号
git push origin 分支名 --force
可以通过 git log 命令查看提交的版本号(选择需要回退的版本号)
注意:
git reset --soft/hard 需要回退到的版本号
soft 和 hard的区别
soft:保留本地当前工作区,用于重新提交(回退到指定版本号,回退的版本号代码会保留到本地工作区,本地工作区代码还是保留最后提交的状态)
hard:不保留本地当前工作区,回退到指定版本号之后,同时本地工作区代码也回退,一定要谨慎使用
git push origin 分支名 --force
撤销后强制提交到当前分支的版本号状态,这里使用要谨慎
查看git pull以那个远程仓库为基准
git remote show origin
git pull 仓库指定分支
git.exe pull -v --progress “origin” develop
本地分支git pull远程依赖修改
git branch --set-upstream-to=origin/master master
设置当前分支的默认推送远端分支
git branch --set-upstream-to=远端库/远端分支 修改的分支名
e.g : git branch --set-upstream-to=origin/ID1000591-0907-4 ID1000591-0907-4
查看当前分支的默认推送远端分支
git branch -vv
删除本地的某次commit
git log 找到要删除的 58211e7a5da5e74171e90d8b90b2f00881a48d3a
git rebase -i 它之前的commit 会弹出一个页面然后 把58211e7a5da5e74171e90d8b90b2f00881a48d3a这一行前面的pick改为drop
想使用某个版本的文件替换当前工作区文件
- git reset 提交记录 – 文件名 或者 git reset 提交记录推到当时状态
- git status 查看下暂存区的文件
- git checkout – 文件名 命令来把 暂存区文件拉到工作区
- “git checkout HEAD .” 或者 “git checkout HEAD ” 命令,会用最新提交的全部或者部分文件替换暂存区和以及工作区中的文件。
想切到当前分支远程仓库的最新提交
git reset --head origin/分支
给当前项目添加子库
git submodule add -f http:///.git
-f 是强制的意思,一般不需要加
命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息。添加完成以后,再将子模块所在的文件夹添加到工程中即可。
submodule的删除稍微麻烦点:首先,要在“.gitmodules”文件中删除相应配置信息。然后,执行“git rm –cached ”命令将子模块所在的文件从git中删除。
下载的工程带有submodule
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:
git submodule update –init –recursive
即可将子模块内容下载下来后工程才不会缺少相应的文件。
拉取有子库的项目
1.拉取字库组件
git submodule update –init –recursive
2.递归切到对象分支
git submodule foreach --recursive ‘git checkout ***’
删除某次改动
git revert 547170dfbabb42de0095d5cd38c05f1abe8f3b65
自动生成一个commit会 描述你没有改动
然后 再git push到远端库即可
对子库的操作
当前库下的所有子库
git submodule foreach ‘git 命令’
当前库的子库的字库…递归调用
git submodule foreach --recursive ‘git 命令’