Git使用教程

配置用户信息

当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。

当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。

很多 GUI 工具都会在第一次运行时帮助你配置这些信息。

Git刪除文件

在git中我们可以通过git rm命令把一个文件删除,并把它从git的仓库管理系统中移除。但是注意最后要执行git commit才真正提交到git仓库

示例1
git rm 1.txt
删除1.txt文件,并把它从git的仓库管理系统中移除。

示例2
git rm -r myFolder
删除文件夹myFolder,并把它从git的仓库管理系统中移除。

Git推送到服務器倉庫

git中,我们可以通过git push把本地仓库的更新推到服务器仓库。

$ git push ssh://git@dev.lemote.com/rt4ls.git master
把本地仓库提交到远程仓库的master分支中
$ git remote add origin ssh://git@dev.lemote.com/rt4ls.git
$ git push origin master 

这两个操作是等价的,第二个操作的第一行的意思是添加一个标记,让origin指向ssh://git@dev.lemote.com/rt4ls.git,也就是说你操 作origin的时候,实际上就是在操作ssh://git@dev.lemote.com/rt4ls.git。origin在这里完全可以理解为后者 的别名。
需要说明的是,默认情况下这条语句等价于提交本地的master仓库到远程仓库,并作为远程的master分支。
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。

$ git push origin test:master // 提交本地test分支作为远程的master分支
$ git push origin test:test // 提交本地test分支作为远程的test分支
如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心

删除文件用 git rm
改文件名用 git mv
使用 git 遇到问题时,git status 一下,通常都会有提示告诉你该怎么做

If you deleted a file from the working tree, then commit the deletion:

git commit -a -m “A file was deleted”
And push your commit upstream:

git push
差别在-a 这个选项
add 只能加入原来没有被跟踪的文件,没有把删除这个行为也加入版本控制

命令为:
git ls-files -d |xargs -i git checkout {}

git ls-files -d :意思是显示出删除的文件
git checkout 命令为恢复某个文件,xargs将其作为参数传给git checkout.

然后就想,能不能从之前的版本中检出这个文件,然后重新添加到版本库中?再作为一个新的提交来挽救?

经实验室可以的,过程如下:

git checkout HEAD^ – a.txt

HEAD^ 代表上一次提交,

– a.txt 表示将上一次提交里的a.txt文件检出到工作区,这样a.txt就回来了。

接着:

git add a.txt && git commit -m “recover a.txt” && git push

其他人直接git pull

从 git 仓库中导出项目

git archive --format tar --output /path /to /file.tar master # 将 master 以 tar 格式打包到指定文件

使用Coding 克隆其他账号的代码 https://xxx@git.coding.net/uuu/iii.git

1 查看远程分支

$ git branch -a

  • br-2.1.2.2

master

remotes/origin/HEAD-> origin/master

remotes/origin/br-2.1.2.1

remotes/origin/br-2.1.2.2

remotes/origin/br-2.1.3

remotes/origin/master
2 查看本地分支
$ git branch

  • br-2.1.2.2

master
3 创建分支

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei(br-2.1.2.2)

$ git branch test

$ git branch

  • br-2.1.2.2

master

test
4 切换分支到test
shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei(br-2.1.2.2)

$ git branch

  • br-2.1.2.2

master

test

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei(br-2.1.2.2)

$ git checkout test

M jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java

M jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java

Switched to branch ‘test’

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei(test)

$ git branch

br-2.1.2.2

master

  • test
    5 删除本地分支 git branch -d xxxxx

$ git checkout br-2.1.2.2

M jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java

M jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java

Switched to branch ‘br-2.1.2.2’

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei(br-2.1.2.2)

$ git br

  • br-2.1.2.2

master

test

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei(br-2.1.2.2)

$ git br -d test

Deleted branch test(was 17d28d9).

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei(br-2.1.2.2)

$ git br

  • br-2.1.2.2

master
6 查看本地和远程分支 -a。前面带*号的代表你当前工作目录所处的分支

shuohailhl@SHUOHAILHL-PC /f/ggg/jingwei(test)

$ git branch -a

br-2.1.2.2

master

  • test

remotes/origin/HEAD-> origin/master

remotes/origin/br-2.1.2.1

remotes/origin/br-2.1.2.2

remotes/origin/br-2.1.3

remotes/origin/master

解决git clone 子模块没下载全的问题

  1. 下载一个包含很多子模块的工程
    例如:git clone --recursive https://github.com/caffe2/caffe2
    如果网络不好或者其他原因导致子模块没有下载完全,这时用git pull是无法下载完全的。

注:这是在英文环境中执行的结果,英文Submodule在中文环境中翻译为“子模组”了。
从log中可以看出,有很多子模块(为节省篇幅,完整log略,可以自行下载测试)。

$ git clone --recursive https://github.com/caffe2/caffe2
Cloning into ‘caffe2’…
remote: Counting objects: 36771, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 36771 (delta 6), reused 7 (delta 5), pack-reused 36754
Receiving objects: 100% (36771/36771), 149.13 MiB | 2.76 MiB/s, done.
Resolving deltas: 100% (26926/26926), done.

(这里只以子模块protobuf为例,其他子模块略)
Submodule ‘third_party/protobuf’ (https://github.com/google/protobuf.git) registered for path ‘third_party/protobuf’
(略)
Cloning into ‘third_party/protobuf’…
remote: Counting objects: 47717, done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 47717 (delta 23), reused 23 (delta 5), pack-reused 47657
Receiving objects: 100% (47717/47717), 40.97 MiB | 59.00 KiB/s, done.
Resolving deltas: 100% (32097/32097), done.
Checking connectivity… done.
Submodule path ‘third_party/protobuf’: checked out ‘a428e42072765993ff674fda72863c9f1aa2d268’

★ 2. 下载子模块
git submodule update --init --recursive
1
如果你不确定子模块是否都已经下载完全了,也可以执行一遍这个命令确认一下。

用git config命令查看配置文件

命令参数 –list, 简写 -l
格式:git config [–local|–global|–system] -l
查看仓库级的config,即.git/.config,命令:git config –local -l
查看全局级的config,即C:\Users\zuoyu.ht.gitconfig,命令:git config –global -l
查看系统级的config,即D:\Program Files\Git\etc\gitconfig,命令:git config –system -l
查看当前生效的配置,命令:git config -l,这个时候会显示最终三个配置文件计算后的配置信息,如下图:
在这里插入图片描述

git clone时报RPC failed; curl 18 transfer closed with outstanding read data remaining 错误

原因1:缓存区溢出

解决方法:命令行输入

git config http.postBuffer 524288000
执行上面命令如果依旧clone失败,考虑可能原因2:网络下载速度缓慢

解决方法:命令行输入

git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
如果依旧clone失败,则首先浅层clone,然后更新远程库到本地

git clone --depth=1 http://gitlab.xxx.cn/yyy/zzz.git
git fetch --unshallow

使用git clone --depth 1 后无法获取其它分支的问题

depth用于指定克隆深度,为1即表示只克隆最近一次commit.

这种方法克隆的项目只包含最近的一次commit的一个分支,体积很小,即可解决文章开头提到的项目过大导致Timeout的问题,但会产生另外一个问题,他只会把默认分支clone下来,其他远程分支并不在本地,所以这种情况下,需要用如下方法拉取其他分支:

$ git clone --depth 1 https://github.com/dogescript/xxxxxxx.git
$ git remote set-branches origin ‘remote_branch_name’
$ git fetch --depth 1 origin remote_branch_name
$ git checkout remote_branch_name

删除最后一次提交

命令很简单,但是不能马虎,不能多回滚或者少回滚,不然就麻烦不断了。

主要命令:

第一步:回滚上一次提交
git reset --hard HEAD^

就很简单,回滚master分支的上一次提交。

第二步:强制提交本地代码
git push origin master -f

由于本地reset 之后本地库落后于远程N个版本,所以需要强制提交。

代理

查看代理
git config --global --list

设置ss
git config --global http.proxy ‘socks5://127.0.0.1:1080’

git config --global https.proxy ‘socks5://127.0.0.1:1080’

设置代理
git config --global https.proxy http://127.0.0.1:1080

git config --global https.proxy https://127.0.0.1:1080

取消代理
git config --global --unset http.proxy

git config --global --unset https.proxy

修改本地分支名称

git branch -m oldName newName

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值