Github使用
常用的命令
- 克隆仓库
1
$ git clone <repo> <directory>
repo:Git 仓库
directory:本地目录
初始化仓库
1
$ git init <directory>
- directory:本地目录
查看仓库状态
1
$ git status
添加文件
1
2$ git add [file1] [file2] ...
$ git add [dir]- file:文件
- dir:文件夹
删除文件
1
$ git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--pathspec-from-file=<file> [--pathspec-file-nul]] [--] [<pathspec>…]
- f:覆盖最新的检测
- n/dry-run:不在硬盘上删除文件,只在仓库中删除文件
- r:递归删除文件夹
- cached:使用此选项仅从索引中取消和删除路径。工作树文件,无论是否修改,都将保持不变
- ignore-unmatch:即使没有匹配的文件,也会以0状态退出
- q/quiet:不打印输出
- pathspec:要删除的文件
移动文件
1
2$ git mv [-v] [-f] [-n] [-k] <source> <destination>
$ git mv [-v] [-f] [-n] [-k] <source> ... <destination directory>- v/verbose:打印被移除文件的名称
- f/force:强制覆盖目标文件
- n/dry-run:只说明会做什么
- k:跳过重命名
比较状态
1
2
3$ git diff [file] 显示暂存区和工作区的差异
$ git diff --cached/staged [file] 显示暂存区和上一次提交(commit)的差异
$ git diff [first-branch]...[second-branch]提交命令
1
$ git commit -m [message]
- message:可以是一些备注信息。
回退版本
1
$ git reset [--soft | --mixed | --hard] [HEAD]
- mixed:为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变
- soft 参数用于回退到某个版本
- hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
分支相关
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15\#列出本地所有分支
git branch
\#列出所有远程分支
git branch -r
\#新建一个分支,但依然停留在当前分支
git branch 分支名
\#新建一个分支,并切换到该分支
git checkout -b 分支名
\#合并指定分支到当前分支
git merge 分支名
\#删除分支
git branch -d 分支名
\#删除远程分支
git push origin --delete 分支名
git branch -dr 分支名
提交代码
向Github提交代码的两种情况
本地没有 Git 仓库,将远程仓库clone到本地
通过clone命令创建的本地仓库,其本身就是一个 Git 仓库了,不用我们再进行
init初始化操作啦,而且自动关联远程仓库。我们只需要在这个仓库进行修改或者
添加等操作,然后commit即可。1
2$ git clone "仓库地址"
$ git push origin main本地有 Git 仓库,并且我们已经进行了多次commit操作
进入仓库,关联远程仓库,origin为远程仓库的名字
1
$ git remote add origin 仓库地址
同步远程仓库和本地仓库
1
$ git pull origin main
强调:在向远程仓库提交代码的时候,一定要先进行pull操作,再进行push操作,防止本地仓库与远程仓库不同步导致冲突的问题,尤其是第二种提交代码的情况,很容易就出现问题。
实际使用
转载自原文
1.远程仓库只有一个master分支的情况
需要用到的命令
1 | git pull----------------从远程仓库拉取代码到本地 |
- 实际场景
假设开发者A和开发者B都刚刚从远程仓库checkout了一份代码到本地.
A:
首先开发者A在README.md文件中进行了如下修改:
然后将修改内容按照如下方式提交到远程仓库:
B:
开发者B此时也要开发代码了,正常来讲,如果开发者B在开发完一个功能需要提交代码之前,肯定要git pull一下代码.比如说开发者B在README.md的第三行里增加了一句话,然后他去git pull代码,结果如下:
★注意点1★–git监控变化的单位是文件
我不知道大家在这里会不会疑惑,反正我疑惑过很久,明明我在Git Bash里改动的是第二行,在Idea里改动的是第三行,不是说git监测的是变化吗?这里怎么就pull不下来呢?其实git所谓的监控变化,监控的单位是文件,也就是说假如其他开发者改动了XXX文件,并且同步到远程库了,你即使在XXX文件里改动了一个标点,加了一个空格,都无法pull成功.
git pull不成功时,你就需要使用git stash命令了,具体解决方式如下:
★注意点2★–git pull可以把所有你上次push后没操作的文件pull下来
A:
接着上面的栗子,假设Git Bash用户同步了服务端的代码,并且在没跟IDEA用户商量的情况下,擅自修改了IDEA用户的代码,如下:
并且Git Bash用户还创建了一个新的文件,如下:
B:
开发者B如果没有进行开发,或者进行了其他文件的开发,而未对README.md文件进行操作,直接git pull,效果见下图.可以发现,git pull可以把所有你上次push后没操作的文件pull下来,并将你本地的代码变成和远程仓库一样的代码.
所以奉在pull代码的时候一定要多注意看一下代码有没有被改动过.
3.使用idea的Update Project代替git pull + git stash +git stash pop
然后点击一下OK,就会弹出如下页面:
然后双击一下有冲突的文件之后,就会弹出如下页面,自我感觉在这个界面里进行冲突解决,要比注意点1中第一个图,那种解决方式爽一些.
并且解决完冲突后,立刻会弹出如下提示:
点开提示之后,你就可以看到哪些文件修改了,哪些文件是新增的,而且你肯定会想去看看你原来操作过的文件有没有被updated过,从而避免注意点2中提到的情况.
">
git merge 相关
在分支之后未对代码修改
在分支之对代码修改