回退某个文件到指定版本
- git log xxx查看你想回退到的commit id
- git checkout commitid xxx 把xxx回退到commitid这个版本
- git status此时可以看到文件已经回退并加进了index暂存区
git pull冲突
https://blog.csdn.net/lincyang/article/details/21519333
git pull把代码从远端拉到本地的workspace. 本地的workspace有修改的话就会冲突.
git stash //将本地workspace改动备份到栈
git pull
git stash pop //如果需要的话,再pop出本地改动.
撤销add
add的内容进入index(暂存区)
git rm --cached xxx
撤销commit
https://www.cnblogs.com/lfxiao/p/9378763.html
git reset --soft HEAD~n n代表几次commit
只会撤销commit 代码仍然会保留.
add的东西存入暂存区.
commit的东西存入本地仓库.
暂时没找到办法只修改本地仓库的内容.分两步:
- git reset --soft HEAD~n 取消掉commit,这时候只是本地仓库没有本次commit的内容了
- git rm --cached xxx 删除掉暂存区的不想要的文件
- git commit 重新commit
查看某一次commit的文件列表
git log --name-only
git 撤回上一次commit中某一个不想添加的文件
git rm --cached yolov3_trafficlights_320_last.weights
git submodule
对于所有分支而言,工作区和暂存区是公共的!!!!!!!!!.即某个branch做的修改只有commit之后别的branch才看不见.
比如好多人在同一个设备上做开发,每个人checkout了一个自己的分支.假设有A,B两个branch. A branch对file1做了修改,但是没有commit,这时候checkout到B branch,B branch会看见file1的修改,有没有办法不看A branch的修改,没有!!!!.除非是在B branch先对file1做了修改,并且commit了.那么此时从A branch是没有办法checkout到B branch的.会报错
error: Your local changes to the following files would be overwritten by checkout:
总之一句话,不想看到别的branch的修改,这个做不到,除非别的branch主动commit或者是stash。
原理
https://git-scm.com/book/zh/v2/Git-工具-重置揭密
强制更新本地代码与远端一致
git强制覆盖本地命令(单条执行):
git fetch --all && git reset --hard origin/master && git pull
第一个是:拉取所有更新,不同步;
第二个是:本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件);
第三个是:再更新一次(其实也可以不用,第二步命令做过了其实)
下载整个项目
git clone xxx
下载某个分支的某个文件
git checkout master xxx.cpp
覆盖本地修改
比如你改了一个文件xxx.cpp,但是你觉得自己改的不对.想回退到和远程仓库master分支的代码一致.
- git fetch //拉取最新代码到本地仓库
- git checkout orgin/master xxx.cpp
一次性提交多笔修改
git add --all.index会被更新为和当前磁盘上的work tree一致.
将
切换分支
git checkout -b myownbranch //-b 不存在则创建myownbranch分支
代码下载下来后,最好不要在原有分支修改.比如你clone了master分支下的代码到本地后
- git checkout -b [yourbranch]
- 修改代码,自测
- git commit -a -m 'my comments' //-a提交所有修改
- git push //这时候远程仓库会出现分支yourbranch
在git push之前,所有的修改都是本地的. - 在网页端提交merge请求,进行了代码review后,把yourbranch的合入master分支.
提交本地修改到远程主机
git push <远程主机名> <本地分支名>:<远程分支名>
例如:
git push origin master:master
git push origin :master //推送空分支到远程仓库的master分支,相当于删除远程仓库的master分支.
查看当前代码与远程仓库代码差异
git diff --cached
查看当前的git状态
git status
会显示当前未提交的修改有哪些.
修改文件并提交
修改了代码xxx.cpp yyy.cpp
直接git commit -a -m 'your comments'//-a提交所有的修改
或者
git add xxx.cpp
git commit xxx.cpp -m 'your comments1'
git add yyy.cpp
git commit yyy.cpp -m 'your comments2'
新增文件的提交
改完代码直接git commit -a的话是不会把新增的文件也commit的.要先git add.
git add xxx.cpp
查看当前的工作分支
git branch
带*号的就是当前工作分支
git branch -a 显示所有分支,包括远程仓库的
查看远程仓库
git remote -v
显示远程仓库名.默认是origin
查看提交日志
git log
git show [id]
git log filename
git show id filename
查看某一个文件的具体提交记录
合并多笔提交
git format-patch [commitkey]
git am
patch -p1 < 0002-add-install.sh.patch
git am --amend
撤销修改
https://blog.csdn.net/YoungStunner/article/details/78696763
- 已修改,未暂存:git checkout . (git checkout
)已暂存 - 未提交: git reset (git reset --hard 会覆盖)已提交
- 未推送: git reset --hard origin/master (远程仓库覆盖本地仓库)
- 已推送: git reset --hard
(如果要覆盖远程必须强制推 git push -f)
回退某个文件修改
https://blog.csdn.net/u011008029/article/details/52351141
- git reset [id] filename
- git commit -m "回退"
- git checkout filename
- git push
查看已经commit但是尚未push的提交
git cherry -v
会给出id
git show id查看具体修改