Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • vscode插件、主题、快捷键、调试、魔改便携模式
  • 好用软件集锦
  • 网站收藏、ref-tools、好用的网站
  • Visual Studio插件和设置-注意不是vscode
  • Tablacus Explorer
  • ezpdf-手机pdf横屏阅读神器
  • 免费SSH工具
  • 用markdown搭建个人博客
  • git、GitHub用法
    • git常用设置
    • ssh登录同一主机设置多个账户
    • Git使用Token进行pull和push
    • Git远程操作
    • 可能出现的问题
  • idea自动上传-winscp实时文件夹同步
  • windows卸载程序的注册表项
  • 1-windows装系统-设置-登录信息
  • word模板设置题目和答案-答案可隐藏
  • 正则表达式
  • MediaCoder 视频压缩参数
  • MinGW
  • 免费专利检索网站
  • 工具软件
gaoliu
2021-10-06
目录

git、GitHub用法

# 常用设置

# git远程仓库url的格式
git@gitee.com:colderleo/cmder_config.git
https://gitee.com/colderleo/allahk.git
1
2

ssh免密登陆,需要用git@xxx.git的形式,https不行。

# git配置

通过cat .git/config查看本项目的配置文件

[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = https://gitee.com/colderleo/cmder_config.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[user]
    name = colderleo
    email = gaoliu@zju.edu.cn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

上面的字段可以用git config设置, 设置时也可以加上 --global 设置为全局的

# 设置用户名
git config user.name colderleo

# 设置全局用户名
git config --global user.name "colderleo"

# 查看所有配置,包括全局配置
git config --list
1
2
3
4
5
6
7
8

# git常用设置

git有3个区,工作区就是工作文件夹下面的东西,缓存区是add命令将工作区复制到缓存区(stage);版本库是comcmit命令将缓存区加入版本库,并清空缓存区。

#### 保存密码
git config --global credential.helper store

#### 去掉每次windows安全中心的验证
git credential-manager uninstall

# 忽略文件权限的改变
git config core.fileMode false
git config --global core.fileMode false

# 取消换行符转换
git config --global core.autocrlf false  
1
2
3
4
5
6
7
8
9
10
11
12

# 添加仓库并提交

# 打开Git Shall, 或者cmd,cd到项目文件夹
cd D:\testGit

# 将该文件夹设为仓库
git init

# 添加改变至暂存区(stage),注意后面有个点
git add .

# commit当前工作
git commit -m "这是一次提交"

# git add 和 git commit 可以合并成一个操作,但是有新添加的文件就不行了。
git commit -am "这是一次提交"

# 如果提示 Please tell me who you are, 则需设置身份
git config user.name "cvster"
git config user.email "535674963@qq.com"

#git status是用来查看当前状态的,如果当前工作已经commit了,那么得到的回复是clean,如果当前的工作还没有commit,它会提示有了修改还没有add和commit。
git status

# git diff是用来查看修改了什么内容的。后面还可以加具体的文件名,比如git diff readme.txt
git diff

# git log用来查看存储的版本。 git reflog,显示简略的信息,每个commit显示一行
git log
git reflog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 退回以前的版本

(hard后面是版本ID,这里HEAD^^就是退两个版本,一个^就是退回上一个版本)。或者第2种,2ccbf62是用git log查看到的版本ID,一长串字符串,它的头几个字符,不用全部输进去,会自动查找。太少也不行。这里退回之后再调用git log,就会发现版本只有这个版本以及它之前的版本,没有后面的版本了。但是用git reflog可以看到历史的所有版本控制命令以及对应的版本。

# 撤销并且不保存修改
git reset --hard HEAD^
git reset --hard 2ccbf62

# 将commit退回到暂存区,相当于只add了,没有commit
git reset --soft HEAD^

# 将commit退回到工作区,相当于没有add,不太好使
git reset --mix HEAD^

# 文件取消add
git reset <file>
1
2
3
4
5
6
7
8
9
10
11
12

退回以前的版本后再跳到后面的版本:用git reflog命令查看历史操作,然后用git reset --hard 2ccbf6c跳回去,也可以

git reset --hard HEAD~1
git reflog
git reset --hard 2ccbf6c
1
2
3

git checkout -- 某文件名,如果修改或者删除了该文件,但是并没有add进缓存区(自然也没有commit),那么这个命令可以将缓存区(add)或者版本库(commit,如果没有缓存)中的内容恢复到工作区,也就是撤销修改。

git checkout -- test.txt
1

# ssh登录同一主机设置多个账户

https://blog.csdn.net/houdabiao/article/details/111085020

假设git仓库地址为: git@126.89.64.7:user1/proja.git 登录git的多个用户名为user1, user2

先在~/.ssh目录用 sshkey-gen 生生多个id_rsa和id_rsa.pub文件,比如id_rsa1.pub, id_rsa2.pub

然后在~/.ssh目录创建config文件并编辑:

Host 126.89.64.7
    HostName 126.89.64.7
    User user1
    PreferredAuthentications publickey
    IdentityFile /root/.ssh/id_rsa1

Host 126.89.64.7
    HostName 126.89.64.7
    User user2
    PreferredAuthentications publickey
    IdentityFile /root/.ssh/id_rsa2
1
2
3
4
5
6
7
8
9
10
11

对于user1的git仓库,需要cd到仓库目录下,设置用户名: git config user.name user1 并且把id_rsa1.pub加入到自己git网页上的sshkey中。

此时user1的该仓库就可以免密push了. 注意Host后面的是该主机的别名,如果用了别名,那么git remote url 里也要用别名,二者保持一致

# Git使用Token进行pull和push

https://www.jianshu.com/p/3b4f7619999e

token就相当于是密码。

一.通过github创建新的access token 流程如下: 1.右上角头像->Setttings->Developer settings->Personal access tokens->Generate new token 2.日期我选择No expiration(无限期),授权范围的话全部选上。

填写Note,例如:myToken; 选择Expiration,选择无期限; 选择Select scopes,全选。 3.点击Generate token生成,令牌保存成功。记住,这个生成的令牌要保存好。如果丢了需要重新生成。

二.切换登录方式,使用最新的令牌登录。 直接用文本编辑器打开git项目根目录中 .git/config文件。(PS:注意.git是隐藏文件夹) 按照如下格式,修改url和fetch即可:

[remote "origin"]
    url = https://用户名:<这里填access_token>@github.com/用户名/项目名.git
    fetch = +refs/heads/*:refs/remotes/origin/*
1
2
3

实测 windows 2.16.2 版本可以正常使用 linux2.33.0版本在这种设置下push会提示 'remote-https' is not a git command, 可能要安装一些库

# Git远程操作

参考,http://www.ruanyifeng.com/blog/2014/06/git_remote.html

# git remote

为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

不带选项的时候,git remote命令列出所有远程主机。

# 为本地仓库增加一个远程主机
git remote add origin https://github.com/cvster/allahk.git

# 显示所有远程主机
git remote

# 显示远程主机的url
git remote -v

# 克隆版本库, 并将远程主机命名为jQuery。 不加-o的话,自动命名为origin
git clone -o jQuery https://github.com/jquery/jquery.git 

# 显示主机详细信息,删除、重命名远程主机
git remote show <主机名>
git remote rm <主机名>
git remote rename <原主机名> <新主机名>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 拉取远程分支

# 查看远程分支列表
git branch -r

# 拉取远程分支
git fetch
# 或者 git fetch origin dev

# 本地新建dev分支并对应到远程的dev分支
git checkout -b dev origin/dev

# 拉取远程dev分支
git pull origin dev

# 删除远程分支 origin/branch1
git push origin --delete branch1

# 本地新建dev2分支
git branch dev2

# 切换到dev2分支
git checkout dev2

# 创建远程dev2分支并将本地dev2推送上去  貌似不能用-u 
git push --set-upstream origin dev2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# git clone

远程操作的第一步,通常是从远程主机克隆一个版本库,这时就要用到git clone命令。

# 克隆jQuery的版本库。
git clone https://github.com/jquery/jquery.git

# 指定本地目录
git clone <版本库的网址> <本地目录名>
1
2
3
4
5

# 建立本地与远程分支的联系

如果本地分支不是从远程clone来的,可以用下面的方式建立联系

# git branch --set-upstream-to origin/master
git branch -u origin/master
1
2

# merge

如果提示'fatal: refusing to merge unrelated histories', 可以加上

--allow-unrelated-histories
1

# git pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

$ git pull <远程主机名> <远程分支名>:<本地分支名>

# 比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
$ git pull origin next:master

#如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull origin next
1
2
3
4
5
6
7

# git push

# git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。
$ git push <远程主机名> <本地分支名>:<远程分支名>

# 将本地分支推送到远程主机origin的master分支上
git push origin master

# 这句是一样的意思
git push --set-upstream origin master

# 将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
$ git push origin master


# 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。下面的命令表示删除origin主机的master分支。
$ git push origin :master 
# 等同于 
$ git push origin --delete master

# 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。将当前分支推送到origin主机的对应分支。
$ git push origin



# 如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 可能出现的问题

# LF will be replaced by CRLF

如果系统出现如下警告:warning: LF will be replaced by CRLF,貌似不管也可以?

因为在windows中的换行符为 CRLF, 而在linux下的换行符为:LF使用git来生成一个rails工程后,文件中的换行符为LF, 当执行git add .时,系统提示:LF 将被转换成 CRLF。解决方法:先删除.git,再配置忽略。

git config --global core.autocrlf false  
1

# untracked content

如果出现GitHub untracked content,可能是因为子文件夹中也添加了git

# .gitignore文件修改后不生效:

git rm -r --cached .
git add .
git status
1
2
3

# rename index.lock 失败

Git rename from index.lock to index failed. Should I try again?(y/n)

https://stackoverflow.com/questions/13635429/git-rename-from-index-lock-to-index-failed

可能是因为连上了ssh,可以先试着把ssh关掉。或者直接杀掉ssh的进程。

# 切换GitHub账户后,git push 失败

  • 参考,http://www.imooc.com/article/257929

  • 打开cmd,输入命令:rundll32.exe keymgr.dll,KRShowKeyMgr,出现存储的用户名和密码窗口

  • 将github相关的条目删除

  • 重新执行命令:$ git push -u origin master,提示输入账户名及密码后,成功。

编辑 (opens new window)
上次更新: 2023/05/07, 17:27:54
用markdown搭建个人博客
idea自动上传-winscp实时文件夹同步

← 用markdown搭建个人博客 idea自动上传-winscp实时文件夹同步→

最近更新
01
通过模板实现结构体成员拷贝-按成员名匹配
05-07
02
c++17通过模板获取类成员的个数
05-01
03
avx-sse切换惩罚
04-30
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×