一、把github上的代码下载下来
- 简单下载git代码
git clone ......
- 下载代码,并更新子模块
git clone ....
# 更新.git/config文件
git submodule init
git submodule update
# 或者
git clone git@github.com:SprintRay-Software/Moonray.git --recursive
二、把修改的代码提交上去
git add ....
git commit -m "........"
git push -u origin master
三、强制切换成某个版本
git reset --hard .....commit code .......
四、创建分支
git checkout -b .... branch name ....
git add .......
git commit -m ........
git push -u origin ......branch name ......
五、切换成最新版本
git pull
六、放弃本地修改,远程分支强制覆盖本地
git fetch --all //只是下载代码到本地,不进行合并操作
git reset --hard origin/分支名如master //把HEAD指向最新下载的版本
七、git网页上删除分支后本地不同步
踩到一个小坑,如果在gitlab或其他web端删除git某分支,本地pull的话并不会更新分支列表,也就是会出现远端分支A已经被删掉了,但是在本地git bash里面仍然能看到远端分支A这种灵异的情况。本地使用branch -a 命令可以看到分支FixIECompatible,并且还可以检出。但是想删除远端分支的时候就报错了,说分支不存在(事实上远端就是不存在)。
可用如下命令刷新分支列表,可解决此问题
# 可用如下命令刷新分支列表,可解决此问题
git remote update origin --prune
# 另外还可使用如下方法查看需要清理的本地分支
git remote prune origin --dry-run
# 或
git remote prune origin -n
八、代码修改完后如何提交
1.先需要把需要合并的分支,更新到最新
2.把自己写好的分支合并进需要合并的分支
3.git会自动合并代码,如果有冲突需要手动修改冲突。
4.修改完冲突,在自己的分支add和commit一下,并push
5.在git网页中提交pull requset
git checkout development
git pull
git checkout DRS-478_updateTime
git merge development
git submodule update
git status
git add MoonrayUI.pro
git commit -m "resolve confilict"
git push
九、从分支中创建分支
# 创建并切换到分支
git checkout –b 分支名称
# 从某个commit开始创建分支
git checkout -b 分支名称 commitID
十、项目中修改了子模块
项目需要add子模块目录,把新的commit id上传上去。
QTCreator中打开子模块的文件后,选择git commit就可以上传子模块。
上传好子模块就又新的commit id,然后再主项目中add时增加那个目录的commit id就好了。
十一、git显示一行commitid
git log --pretty=one
十二、一台电脑用两个git
https://blog.csdn.net/ziwuzhulin/article/details/90400789
十三、修改git远程地址
git remote set-url origin git@github.com:aimi-cn/AILearners.git
十四、git查看add后的内容
#是查看暂存的变化
git diff --staged
十五、git是用git lfs上传大文件
git上传最大只有2gb可以上传,否则会生成remote: fatal: pack exceeds maximum allowed size
的错误
git lfs install
git lfs track "path/to/large/file"
git add .gitattributes
git add "path/to/large/file"
git commit -m "Add large file: xxxx"
git push origin main
查找文件
find ./ -type f -size +100M -not -name '*.o' -exec git lfs track {} \; -exec git add {} \;
find ./ -type f -size +100M -name '*.jar' -exec git lfs track {} \; -exec git add -f {} \;
find ./ -type f -size +100M -name '*.a' -exec git lfs track {} \; -exec git add -f {} \;
find ./ -type f -size -100M -size +50M|grep -v '\/.git'
撤销一次最近的本地提交
git reset HEAD~1
把git本地的commit -m步骤撤销
git reset --soft HEAD^
之查看改动部分的内容,查看uncrack文件
git status -uno
find ./ -type f -size +100M -not -name '*.o'|grep -v '.git'|cut -c 3-
find ./ -type f -size -100M -size +50M|grep -v '\/.git'|cut -c 3-
git的commit一个一个提交脚本
#!/bin/bash
set -e
set -x
cd xxxx-directory
while true;do
CurrentBranchName=`git rev-parse --abbrev-ref HEAD`
RecentLogCommit=`git log --oneline origin/${CurrentBranchName}..HEAD|tail -n 1|awk '{print $1}'`
RecentLogNote=`git log --oneline origin/${CurrentBranchName}..HEAD|tail -n 1| cut -d ' ' -f 2-`
if [ -z "$RecentLogCommit" ];then
echo "All local commits have been pushed. Exiting loop."
break
fi
echo "Recent log commit: $RecentLogCommit"
echo "Recent log note: $RecentLogNote"
echo "Current branch name: $CurrentBranchName"
git push origin $RecentLogCommit:$CurrentBranchName || true
sleep 1
echo "sleep done"
done