文章目录
各区域回退
git checkout – file 可以丢弃工作区的修改(仅限于文件)
git clean -df 要清除工作区中的所有文件和更改(包括文件夹)
git rm -r --cached .删除缓存区,回退到工作区
出现的问题
到公司去一般是直接克隆网上仓库到本地:
下面对一些情况进行分析:
你编写好了一段代码,公司其他员工先提交到网上仓库了,你此时推送上去会失败
方案一:
1 先将本地代码放在暂存区,暂时不提交到本地仓库:(这估计就是暂存区的好处)
2 将远程gitlab上代码拉取下来,后再提交暂存区代码
方案二:
1.git pull --rebase origin master(master是分支名字,换成你需要更新的分支名)
意思是重新拉取最新的分支,–rebase的作用是将本次的commit提交放在拉取代码的后面
2.再执行git push origin master(master是分支名字,换成你需要更新的分支名)
拉去文件时文件覆盖
merge分支时,本分支多出的文件不会被覆盖
例如本分支有a.txt,c.txt.合并其他分支b.txt,c.txt时,a.txt不会消失
pull文件测试:
本地文件也没有出现被覆盖
** 本地仓库和网络仓库的log是否一致**
本地仓库记录和网上仓库记录一样
一、git是什么?
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
在本地文件中建立了一个git文件后,他会立刻管理当前文件,对没有添加进该版本控制的文件进行标记
二、使用步骤
1.先配置身份
项目身份
config user.name “wangyuelihai”
全局身份
代码如下(示例):
config --global user.name "lol"
config --global user.email "lol@xxx.com"
查看配置是否成功
$ git config --global user.name
lol
2.为项目建立一个代码仓库
先进入项目目录
代码如下(示例):
小王@DESKTOP-6VKQ3FI MINGW64 /d/Gittest
$ git init
Initialized empty Git repository in D:/Gittest/.git/
$ ls -al //查看文件夹目录
total 75
drwxr-xr-x 1 小王 197121 0 Apr 10 20:09 ./
drwxr-xr-x 1 小王 197121 0 Apr 10 20:00 ../
drwxr-xr-x 1 小王 197121 0 Apr 10 20:09 .git/
-rw-r--r-- 1 小王 197121 222 Apr 10 20:00 .gitignore
drwxr-xr-x 1 小王 197121 0 Apr 10 20:01 .gradle/
drwxr-xr-x 1 小王 197121 0 Apr 10 20:09 .idea/
drwxr-xr-x 1 小王 197121 0 Apr 10 20:00 app/
-rw-r--r-- 1 小王 197121 667 Apr 10 20:00 build.gradle
drwxr-xr-x 1 小王 197121 0 Apr 10 20:00 gradle/
-rw-r--r-- 1 小王 197121 1182 Apr 10 20:01 gradle.properties
-rwxr-xr-x 1 小王 197121 5296 Apr 10 20:00 gradlew*
-rw-r--r-- 1 小王 197121 2260 Apr 10 20:00 gradlew.bat
-rw-r--r-- 1 小王 197121 428 Apr 10 20:00 local.properties
-rw-r--r-- 1 小王 197121 44 Apr 10 20:00 settings.gradle
会生成一个git目录(用来记录本地所有git操作)
若想删除本地代码仓库,可直接删除该文件夹
3.提交本地代码
git add app提交整个app目录下的文件
git add . 添加所有文件
git commit -m “First commit” app(-m 为添加的文件备注信息)
4.不提交选定类容
git允许用户将指定的文件或目录排除在版本控制范围之外
即检查代码仓库中是否存在.gitignore文件(android studio在创建项目时会自动生成该文件)
若存在就一行一行的读取,将每行指定的文件或目录排除在版本控制之外
5.查看修改类容
适用与本地查看自己更改的内容
$ git diff
查看具体类的修改类容
修改本地文件没有add时
1.和缓存区的进行比较
$ git diff ccc.txt
warning: LF will be replaced by CRLF in ccc.txt.
The file will have its original line endings in your working directory
diff --git a/ccc.txt b/ccc.txt
index b656400..d17c059 100644
--- a/ccc.txt
+++ b/ccc.txt
@@ -1 +1,2 @@
dsad
+dsadasdasdas
---------
2.add后
git diff a.txt
无
3.和本地库比较
git diff HEAD a.txt
4.和上一个版本比较
git diff HEAD^ a.txt
git diff 不指定文件则比较所有被改动文件
6.撤销未提交的内容
git reset HEAD aaa.txt
7.查看提交记录(git log)
$ git log
将查看记录放到一排!
移动到当前版本需要多少步
git log -1
查看最后一次提交记录
git log -p [分支]查看该分支更改的具体消息 {n}
git log dev ^master
查看 dev 有,而 master 中没有的:
git log --left-right dev…master
注意 commit 后面的箭头,根据我们在 –left-right dev…master 的顺序,左箭头 < 表示是 dev 的,右箭头 > 表示是 master的。
//查出 03.12-03.18 期间的提交
git log --since=“2018.03.12” --until=“2018.03.18”
使用这个命令可以容易地看到谁做了什么,毫无保留的。
git shortlog
前进后退历史版本
1
2 只能往前到以前的版本
git reset --hard^^ 退^个
git reset --hard~n 退n个
3.退回修改前
git reset --hard HEAD
8.查看分支
$ git branch -v
- master
$ git branch version1.0
$ git branch -v
- master
version1.0
$ git branch -v 查看分支
$ git branch version1.0创建分支
git checkout version1.0切换分支
git branch -D version1.0删除分支
git merge version1,0合并分支(在主线上和支线)
分支冲突
冲突原因:
当两个分支同时改了一个文件的内容,两个文件内容不一样时,再合并分支时会出现问题
9.与远程库协作
若其它账号想要push就必须在
github上添加其为团队成员
添加成员
复制邀请链接发送给那个人
问题
git clone https://github.com/wangyuelihai/SunnyWeather.git
这里我的电脑出现:
Failed to connect to github.com port 443: Timed out
连接外网容易超时
所以设置了sstop代理
简写
git remote -v
查看已命名内容
git remote add origin xxxxx
如果最开始是克隆的外界仓库,那么git remove 存在一个origin ,若是自己在本地init 一个仓库则没有,利用这一现象可以查询当前版本仓库源头
拉文件
一般先使用
git fetch origin {分支}将远程库下载到本地,没指定分支就是默认master分支
然后会返回一个分支
FETCH_HEAD
该分支上记录了修改信息
git log -p FETCH_HEAD(查看具体修改的信息)
git fetch origin master:tmp
//在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
git diff tmp
//来比较本地代码与刚刚从远程下载下来的代码的区别
git merge tmp
//合并temp分支到本地的master分支
git branch -d tmp
//如果不想保留tmp分支 可以用这步删除
如果不想查看可以直接
git pull origin master:brantest
将远程master分支与brantest合并
如果当前是brantest分支就可省略
git pull origin master
拉文件出现
refusing to merge unrelated histories
原因是最开始在本地init了一个本地仓库,
解决方法
$git pull origin master --allow-unrelated-histories
先拉一下
删除文件
在本地仓库中删除
物理删除
git add .
git commit -m “deleteall”
git push origin master
远程库也没有了
推文件
$ git push <远程主机名> <本地分支名>:<远程分支名>
条件:必须工作区的文件必须和远地仓库一样才行
常见错误:前一个员工push后,后一个员工没有先拉后推,而是直接推,这会有问题。
解决方法:推不了,就先拉,拉文件是会告知那个文件有问题,和分支解决方法一样,对某个需要手动更改的文件进行手动更改再提交即可。
跨团队协作
请别人帮忙
不用加入团队
1.访问团队的远程库链接,先FORK一份,在拉入本地仓库,进行更改
2.再pull request
3.团队收到后可以审查,最后点击merge就可以合并了
4.合并后就可以拉取到本地了
git免密push
替换自己的账号
生成ssh目录
将生成的密匙放到github账号的个人设置ssh key 中
在用ssh地址传输就行了
标签
相当于为当前工作分支存个档
问题
refusing to merge unrelated histories
如果再本地建的git仓库会出现refusing to merge unrelated histories
最好是先clone远地仓库
再次学习感悟
1.仓库的文件(A+B+C+E)
你本地建立的仓库(A+B+C+D)
你可以拉,但是不能推,因为E你没有
2.当本地仓库于网上仓库推或者拉时,这时git log便是两个仓库的修改集合记录