Git简要教程

Blog迁移至 https://thianda91.github.io

本文自2017-10-23 起再更新发布会在https://thianda91.github.io中,当前可访问:https://thianda91.github.io/notes/git-learning.html查看。

本文作为自己的笔记留存。从安装到基本使用,满足日常的需求。

大家想系统学习我推荐这个:史上最浅显易懂的Git教程!

或者阅读官方教程,中文的。

Git安装配置

下载安装git-for-windows

在windows安装时选择如下选项:

  • Use Git from Git Bash only
  • Use the OpenSSL libriary
  • Checkout as-is,commit as-is
  • Use MinTTY
  • 其他默认即可

安装路径建议为C:/Git/或者D:/Git/

使用之前可在git安装目录新建名为home的文件夹。并将此路径添加到环境变量HOME中,添加到用户变量即可。这样在使用git时产生的所以配置文件均会保存到此目录中,并且加快git bash的启动速度。

否则环境变量中无HOME的变量,则会将配置信息以及生成的ssh密钥保存在当前登录用户的根目录,比如C:/Users/administrator/

常用命令

初始化git版本库

git init

克隆版本库

git clone <dir>

配置联网的代理服务器

bash的ssh命令可在~/.ssh/config文件中配置如下一行,即可测试ssh -T git@github.com

ProxyCommand connect -H xxxx:8080 %h %p

配置git命令使用代理

git config --global http.proxy http://xxxx:8080
git config --global http.proxy user:password@http://xxxx:8080 # 需验证用户密码时这样写
git config --global https.proxy http://xxxx:8080 # 设置git访问https协议所使用的代理
git config --get http.proxy # 检查是否设置成功
git config --global http.sslVerify false # 解决https证书错误的问题
# 经测试,在内网环境使用代理后使用 git协议 (git@github.com:xxx...) 无法依然使用,需要修改为 https 协议,每次push都需要输入账户密码,比较麻烦
git config --global credential.helper wincred # 设置使用window凭据缓存账号密码,用于https方式push
# 当前git bash窗口有效
export http_proxy="http://127.0.0.1:8087"
export https_proxy="http://127.0.0.1:8087"
# cmd 代理设置
set http_proxy=http://proxy.yourname.com:8080
set http_proxy_user=
set http_proxy_pass=

取消git联网的代理服务器

git config --global --unset http.proxy

ssh的说不好是什么的配置

编辑~/.ssh/config文件,添加如下内容

Host github.com
Port 443
User git
Hostname ssh.github.com
PreferredAuthentications publickey
identityfile ~/.ssh/id_rsa
ProxyCommand connect -H PROXY_HOST_IP:PORT %h %p

用于在内网环境下ssh使用代理通过https协议与github。

配置用户名和邮箱

git config --global user.email "You@example.com"
git config --global user.name "Your Name"

添加远程仓库

git remote add origin git@github.com:youname/yourrepo.git

添加文件

git add <filename>
git add . # 添加所有文件

提交

git commit -m '<comment>'
git commit -am '<comment>' # 若无增删文件,可这样使用,代替`git add .`&`git commit -m '<comment>'`

如果忘了加-m参数,会进入到linux的vim编辑界面,在输入了comment后按ESC,输入:wq按回车即可。

git commit --amend  --date="commit_time" # 修改上一次的提交时间
# commit_time的格式可以执行date -R来查看。若修改上一次时间为当前时间,可执行:
git commit --amend --date="$(date -R)"git commit --amend --date=`date -R`
# 其他时间自己构造即可:
git commit --amend --date="Sun, 25 Dec 2016 19:42:09 +0800"
git commit --amend --date="$(date -d '2018-02-02 18:15:15' -R)"

查看状态

git status   # 在任何环节均可以查看状态。

查看所有分支

git branch --all 

新建分支

git checkout -b <branch>

等同于:

git branch <branch>
git checkout <branch>

git 本地分支与远程分支关联

1) github上已经有master分支 和dev分支
git checkout -b dev   # 新建并切换到本地dev分支
git pull origin dev   # 本地分支与远程分支相关联
2) 在本地新建分支并推送到远程
git checkout -b test
git push origin test   # 这样远程仓库中也就创建了一个test分支

发布dev分支

发布dev分支指的是同步dev分支的代码到远程服务器,与新建分支并推送类似

git push origin dev:dev  # 这样远程仓库也有一个dev分支了

在dev分支开发代码

git checkout dev  # 切换到dev分支进行开发
# 开发代码之后,我们有两个选择
# 第一个:如果功能开发完成了,可以合并主分支
git checkout master  # 切换到主分支
git merge dev  # 把dev分支的更改和master合并
git push  # 提交主分支代码远程
git checkout dev  # 切换到dev远程分支
git push  # 提交dev分支到远程
# 第二个:如果功能没有完成,可以直接推送
git push  # 提交到dev远程分支
# 注意:在分支切换之前最好先commit全部的改变,除非你真的知道自己在做什么

删除分支

git push origin :dev  # 删除远程dev分支,危险命令哦
# 下面两条是删除本地分支
git checkout master  # 切换到master分支
git branch -d dev  # 删除本地dev分支

标签

git tag # 查看标签
git tag -l 'v1.4.2.*' # 搜索特定模式列
git tag -a v1.4 -m 'my version 1.4' # 添加标签 -a 标签名字 -m 标签说明
git show v1.4 # 查看标签版本信息
git tag v1.4-lw # 直接给出标签名称 创建轻量标签
git tag -v [tag-name] # 验证已经签署的标签 (git tag -s v1.4)
git tag v1.2 9fceb02 # 对早先的某次提交加注标签
git push origin --tags # 推送所有标签 默认 git push 不会推送标签到远端
git tag -d v1.4-lw # 删除标签

其他命令

git push -u origin master
git log
git reflog
ssh-keygen -t rsa -C "yxd9721@qq.com"

彻底删除某个文件的历史记录

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch FILE_PATH' --prune-empty --tag-name-filter cat -- --all

git push origin master --tags --force
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

FILE_PATH替换成要删除的文件,执行即可。

修改历史提交数据

git filter-branch命令,该命令会在当前分支的所有提交上上执行参数所描述的操作。如果你要在所有分支的所有提交上执行,可以在后边加上--all选项。也可参考上面彻底删除某文件历史记录的命令参数。

比如,你想修改你的邮箱为新的邮箱 :

git filter-branch --commit-filter '
	if [ "$GIT_AUTHOR_EMAIL" = "old@example.com" ];
	then
			GIT_AUTHOR_NAME="NEW NAME";
			GIT_AUTHOR_EMAIL="NEW_Email@example.com";
			git commit-tree "$@";
	else
			git commit-tree "$@";
	fi' HEAD

一些alias

可将下面的配置手动保存到~/.gitconfig文件中

[alias]
	lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
	lgg = log --no-merges --color --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit
	ls = log --no-merges --color --stat --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit

效果等同于执行:

git config --global alias.lg log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
git config --global alias.lgg log --no-merges --color --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit
git config --global alias.ls log --no-merges --color --stat --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit

使用github.com

设置ssh key

// 1. 创建 ssh key,出现提示一路按回车
ssh-keygen -t rsa -b 4096 -C "thianda91@outlook.com"
// 2. 让 ssh-agent 在后台运行 (start the ssh-agent in the background)
eval $(ssh-agent -s)
// 3. 指定密钥给本地ssh-agent
ssh-add ~/.ssh/id_rsa
// 4. 复制公钥,然后粘贴到github->Setting->SSH and GPG keys->New SSH key
clip < ~/.ssh/id_rsa.pub
// 5. 验证ssh key
ssh -T git@github.com

使用方法

在git-bash中使用ssh协议的链接进行clone和push,即可基于ssh key免输密码。

设置启动git bath后自动运行ssh-agent

将下面的代码保存到~/.profile 或者 ~/.bashrc~表示当前用户的用户目录。或者是前文提到的新建的home文件夹。

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
# 若要 ssh-agent 运行一段时间后自动停止,可将上面一行改成 ssh-add -t <seconds>
# 比如本人设置成了 ssh-add -t 1800
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

详细讲解:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-blSGp43T-1671088143538)(null)]

图片来自: 廖雪峰的官方网站

点“Add Key”,你就应该看到已经添加的Key。

参考

generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
adding-a-new-ssh-key-to-your-github-account
working-with-ssh-key-passphrases
CMD 和 Git 中的代理设置

拓展阅读

git pull介绍

在线学习git命令

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Git GUI是一款用于图形化展示和操作Git版本控制系统的工具。它提供了一个用户友好的界面,使得使用Git变得更加方便和直观。以下是一个简要Git GUI教程。 首先,你需要安装Git GUI工具。它可以从Git官网上下载并安装。安装完成后,你可以通过在命令行中输入“git gui”来启动Git GUI。 在Git GUI中,你可以选择打开已有的Git仓库,或者克隆一个新仓库。当你打开一个仓库之后,你将会看到一个概览界面,显示了当前的分支、提交历史以及文件的状态。 如果你想要创建一个新分支,你可以点击界面上的“Create Branch”按钮,然后输入新分支的名称。你也可以切换已有的分支,只需点击界面上的“Checkout”按钮,然后选择你想要切换到的分支。 当你修改了代码后,你可以通过点击界面上的“Stage Changed”按钮将修改添加到暂存区。然后,你可以输入一个提交信息,点击界面上的“Commit”按钮进行提交。 如果你想要查看提交历史,你可以点击界面上的“History”按钮。在提交历史界面中,你可以浏览每个提交的详细信息,包括作者、时间和提交消息。 除了以上的基本操作外,Git GUI还提供了其他高级功能,如合并分支、解决冲突等。你可以通过在界面上浏览菜单栏或者使用快捷键来进行这些操作。 总的来说,Git GUI是一个强大的工具,使得Git的使用变得更加简单和直观。通过逐步学习和实践,你将能够快速掌握Git GUI的使用,并享受到它带来的便利和效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值