git常用命令

回退某个文件到指定版本

  • 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的东西存入本地仓库.
暂时没找到办法只修改本地仓库的内容.分两步:

  1. git reset --soft HEAD~n 取消掉commit,这时候只是本地仓库没有本次commit的内容了
  2. git rm --cached xxx 删除掉暂存区的不想要的文件
  3. git commit 重新commit

查看某一次commit的文件列表

git log --name-only

git 撤回上一次commit中某一个不想添加的文件

git rm --cached yolov3_trafficlights_320_last.weights

git submodule

git演示动画

对于所有分支而言,工作区和暂存区是公共的!!!!!!!!!.即某个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查看具体修改

在clone前查看项目大小

https://www.jianshu.com/p/fabe65bdefb0

比如

原文地址:https://www.cnblogs.com/sdu20112013/p/10918327.html