写在前面
做课题需要写代码,将代码放到Gitee
在Gitee上发现IDE插件,我是VS
除了通过VS同步本地代码到Gitee,,还学习用Git bash来做
Gitee — VS的插件
给出链接
这里注意几点:
- 在团队资源管理器(Team Explorer)登录后,可以clone云端的仓库到本地,注意更改路径;
- 也可以在Team Explorer在云端创建仓库;
VS插件之【上传本地.sln到 新建云端仓库】
- VS打开一个.sln , 单击VS界面右下角的Publish,Publish 变成 master,单击master,选择Git 或者 进入Team Explorer, 选中发布到Git(Publish Git Repo);
- 进入新建云端仓库界面,按要求即可以新建一个仓库;
VS插件之 【上传本地.sln到 已有云端仓库】
- 在Gitee新建一个仓库,不要选择 .gitignore 和 用README.md 初始化这个仓库, 或者 已经有了README之类的,需要先在Gitee上面的仓库界面选择 “管理 / 清空项目";先用第二步,不行在看第一步
- 对于如果仓库已经有别的东西了,我们也可以将右键解决方案—》将解决方案添加到源代码管理;之后在团队资源管理中 双击文件,进行同步,;之后将远程的地址拷贝进分布的位置,进行发布。
- 依次进入团队资源管理器-发布-发布到远程存储库,输入项目的git地址进行发布。注意:URL是在团队资源管理-设置里面设置的,所以我们可以在 设置/ 存储库设置 里面看到 origin, 这是默认的 云端存储库URL地址 , 我们还可以在 存储库设置 里面添加一个新的URL,名称比如可以为origin1 。 然后在 将解决方案发布到远程存储库时,可以选择 URL 。
使用Git Bash将本地文件上传云端
- git config 配置用户信息时,如果加上global 表示以后不管在哪个文件夹下面打开Bash,Git的config都是global后面的
比如 git config --global user.name “xxx” - 参考链接
方法1、先将仓库clone到本地,修改后再push到码云的仓库
修改,指的是,比如说往这个仓库的本地地址中增删文件
git clone xxxxxx
git add .#将当前目录所有文件添加到git暂存区
git commit -m "my first commit" #提交并备注提交信息
git push origin master #将本地提交推送到远程仓库
方法2、本地初始化一个仓库,设置远程仓库地址后再做push
先将待上传的本地文件夹初始化为一个仓库,然后再将其同步到云端
git init
git remote add origin https://gitee.com/用户个性地址/HelloGitee.git
git pull origin master
git add .
git commit -m "第一次提交"
git push origin master
类似【VS插件之 【上传本地.sln到 已有云端仓库】】里第一步提到的
在新建仓库时,如果在码云平台仓库上已经存在 readme 或其他文件,在提交时可能会存在冲突,这时用户需要选择的是保留线上的文件或者舍弃线上的文件,如果您舍弃线上的文件,则在推送时选择强制推送,强制推送需要执行下面的命令(默认不推荐该行为):
git push origin master -f
如果您选择保留线上的 readme 文件,则需要先执行:
git pull origin master
git push -u 的 u
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
$ git push -u origin master
git push大全
git pull 和 git fetch的区别 + 我们看到 .git 里面文件的意义
从结果来看 : git pull = git fetch + git merge
原链接
git clone仓库中的某一个文件夹
现在有一个 TDRebuild 仓库 https://gitee.com/randolf/TDRebuild.git
你要gitclone里面的Algorithm子目录:
在本地的硬盘位置打开Git Bash
git init test && cd test //新建仓库并进入文件夹[test是任意建立的本地文件夹名]
git config core.sparsecheckout true //设置允许克隆子目录
echo 'Algorithm*' >> .git/info/sparse-checkout //设置要克隆的仓库的子目录路径 //空格别漏
git remote add origin https://gitee.com/randolf/TDRebuild.git //这里换成你要克隆的项目和库
git pull origin master //下载
git clone仓库中的某一个文件
echo 'WorkSchedule/PPTData/EdgeDetect/a0_0_detect_4img.png*'>>.git/info/sparse-checkout # 注意*可要可不要,都可以克隆文件
其余同clone单个文件夹
每次clone后,需要重新初始化一个本地仓库,即重新 git init xxx cd xxx, 不能在一个本地文件夹多次clone
一个仓库别人提供了commit,或者在远端更改了比如加了个README,这是本地push
解决方法: git pull origin master
之后出现git pull没有注释无法merge,解决
Git三个部分
- Git 目录
- 工作目录(或工作树)
- 暂存区
工作目录是用户在本地对项目进行更改的地方。工作目录从 Git 目录的对象数据库中提取项目的文件,并将其放置在用户的本地计算机上。就是项目文件夹
Git 目录(位于 YOUR-PROJECT-PATH/.git/
中)是 Git 存储准确跟踪项目所需的所有内容的位置。这些内容包括元数据和一个对象数据库,其中包含项目文件的压缩版本。就是工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
暂存区是一个文件,用于存储下一次 commit 内容的信息。“commit(提交)” 的意思是你告诉 Git 保存暂存区的更改。 Git 照原样拍摄文件快照,并将该快照永久存储在 Git 目录中。
在三个部分中,文件可以在任何给定时间处于三种主要状态:提交,修改或暂存。在工作目录中对文件进行修改,然后,将其移至暂存区进行暂存,最后,commit 提交文件。就是Git的版本库里称为stage(或者叫index)的暂存区
本地与github冲突
有两个仓库,两个仓库都都被修改了.push的时候冲突了.
Your branch and 'origin/master' have diverged,
(use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean
保留本地修改
此时,先用stash
将本地修改暂时存到Git栈中,然后将云端数据拉下来.再将暂存在Git栈中的本地修改读取出来,并恢复.
git stash # 将工作区恢复到上次提交的内容,同时备份本地所做的修改保存到Git栈中
git pull
git stash apply # 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。
git add .
git commit -m "--"
git push
stash详解
有些东西已经修改了,但是现在不上传,先将其存起来,然后切换分支干别的或者pull.干完后,还需要将其存起来的东西加载回来.
$ git stash save "注释"//储藏工作区,输出的main后面的是commit id 以及注释内容
Saved working directory and index state WIP on main: 7147ffc 光线好的情况下采集图像
$ git stash list //查看储藏记录
stash@{0}: WIP on main: 7147ffc 光线好的情况下采集图像
$ git status //查看工作区
On branch feature-entryForm
Your branch is up to date with 'origin/feature-entryForm'.
nothing to commit, working tree clean
$ git stash apply
git stash命令
(1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也可以的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
(5)**git stash apply** :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
(7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
(8)git stash clear :删除所有缓存的stash
但是有的时候,我们执行了stash后,发现有的文件并没有被stash起来. 新增的文件是不会被stash的,需要将这些新增文件先add进暂存区(在stash前或者后add都可以),git add是指加到版本控制中
https://www.cnblogs.com/zndxall/p/9586088.html
常规 git stash 的一个限制是它会一下暂存所有的文件。有时,只备份某些文件更为方便,让另外一些与代码库保持一致。一个非常有用的技巧,用来备份部分文件:
- add 那些你不想备份的文件(例如: git add file1.js, file2.js)
- 调用 git stash –keep-index。只会备份那些没有被add的文件。
- 调用 git reset 取消已经add的文件的备份,继续自己的工作。
不保留本地修改
git fetch origin
git reset --hard origin/master
撤销
- 撤销
git add
(要在 commit(提交)之前撤销git add
)
- 运行
git reset <file>
- 或
git reset
取消所有更改即可。
- 撤销
commit
:git reset --soft HEAD^
-
HEAD^的意思是上一个版本,也可以写成HEAD~1
-
如果你进行了2次commit,想都撤回,可以使用HEAD~2
-
参数:
- `git reset --mixed HEAD^`:将最近一次提交节点的提交记录回退到**工作区***
* `git reset --soft HEAD^`:将最近一次提交节点的提交记录回退到**暂存区***
* `git reset --hard HEAD^`:将最近一次提交节点的提交记录全部清除*
* `git revert`是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
- --mixed : 意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
- 这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
---
- --soft :不删除工作空间改动代码,撤销commit,不撤销git add .
---
- --hard:删除工作空间改动代码,撤销commit,撤销git add .
- 注意完成这个操作后,就恢复到了上一次的commit状态,本地修改全部丢失。
commit
注释写错了,想改一下注释
- git commit --amend
- 此时会进入默认vim编辑器,修改注释完毕后保存就好了。
- 回滚到指定版本
git log
找到需要返回的commit id
号git reset
后接commit id
号- git reset –-soft:回退到某个版本,回退了commit的信息,不会恢复到index file一级。通常使用在当你git commit -m "注释"提交了你修改的内容,但内容有点问题想撤销,又还要提交,就使用soft,相当于软着路;
- git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉,相当于硬着路,回滚最彻底。
git add HEAD commit stage checkout
-
第一步是用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区;没有add的文件是untracked file
. -
第二步是用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。 -
所以,
git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支。
-
Git管理的是修改,当你用
git add
命令后,git commit
只负责把暂存区的修改提交了. commit提交的是在暂存区域的快照,还没add到staged区域的文件是不会被commit的。- 第一次修改 ->
git add
-> 第二次修改 ->git add
->git commit
,两次修改全部提交 - 第一次修改 ->
git add
-> 第二次修改 ->git commit
只提交了第一次修改
- 第一次修改 ->
-
命令
git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout
命令。 -
git reset HEAD file
(用HEAD
时,表示最新的版本。)是将暂存区的修改撤销掉(unstaged),重新放回工作区,接着我们用git checkout -- file
丢弃工作区的修改 -
小结:
-
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
-
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
-
gitignore删除远程保留本地
- 删除远程保留本地
$ git pull origin master # 将远程仓库里面的项目拉下来
$ dir # 查看有哪些文件夹
$ git rm -r --cached target # 删除你要删除的文件名称,这里是删除target文件夹(cached不会把本地的flashview文件夹删除)
$ git commit -m '删除了target' # 提交,添加操作说明
git push -u origin master #重新提交(若需要对其他分支进行操作,则把master换为对应分支,如:git push -u origin dev)
- 忽略子文件夹
.gitignore忽略多层文件夹用**
**/bin/Debug/
前面的两个*号代表任意多层上级文件夹
需要 git 1.8.2 及其以上的版本才支持