$Git$ 的一些操作
从无到有
首先确保github SSH keys(Authentication keys)中有本机的ssh密钥
否则新建一个(默认当前ssh已有id_rsa.pub)
复制id_rsa.pub中的内容到github SSH keys中
Step 1:添加一个 $.gitignore$ 文件,忽略 $.idea$ 编辑器的配置文件
# .gitignore文件中填写
.idea
Step 2:添加 $read.me$ 文件,$notes$ 是 $repo$ 的名字
echo "# notes" >> README.md
Step 3:初始化,产生 $.git$ 文件
git init
Step 4:添加文件到暂存区
git add . # 添加所有文件
git add -u # 添加仅监控已跟踪的文件
git add -A # 添加已跟踪和未跟踪的文件
Step 5:提交,附上 $message$
git commit -m "first commit"
Step 6:分支操作(可选)
git branch -a # 查看本地分支
git branch -M main # 将本地分支命名为main(原本可能是master)
Step 7:添加远端仓库
给远端仓库添加
origin
别名, 以后就用
origin
代替了后面一长串名字
可能已经添加, 会提示
error: remote origin already exists.
git remote add origin https://github.com/noonisy/notes.git
git remote -v # 查看远端
Step 8:推送代码,同步到远端
origin
是远端的别名,
master
是本地的别名
git push -u origin master
从有到添加
# 在文件夹下新建111.txt
touch 111.txt
git add -A
git commit -m "添加111.txt"
git push
合作开发
有时候
git push
出错, 是因为其他人先
push
了
所有要先
pull
下来,修改后再
git push
git pull
Pull Request
Step 1:fork 到自己仓库
Step 2:clone 到本地
git clone xxx
Step 3:修改本地代码
# 创建并切换到新分支
git checkout -b <your-branch-name>
# do some modify
Step 4:准备工作
# 设置upstream
git remote -v
git remote add upstream 原repo.git
# 从 upstream 获取最新的提交信息
git fetch upstream
git rebase upstream/main
# 合并最新分支(可选)
# git merge upstream/master
Step 5:提交到自己仓库
git status
git add xxx
git commit -m ""
git push --set-upstream origin <your-branch-name>
Step 6:发起PR,网页操作(或者VSCode中)
在自己仓库里面 create new request
写 title 和 desciption
最后 create pull request
Step 7:删除分支
git checkout main
git branch -d <your-branch-name>
git push origin --delete <your-branch-name>
merge PR 的时候,多条 commits 可以使用 Squash and merge
如果落后repo的更新,可以使用 Rebase and merge。但不要 rebase 已经推送到远程仓库的公开分支。
回退
使用
--soft
参数将会仅仅重置HEAD到制定的版本, 不会修改 $index$ (暂存区)和 $working\ tree$ (工作区)
默认的使用
--mixed
参数与
--soft
的不同之处在于,
--mixed
修改了 $index$, $index$ 中给定
commit
之后的修改被
unstaged
使用
-hard
参数同时修改 $index$ 和 $working\ tree$, 包括本地文件的修改都会被清除,彻底还原到上一次提交的状态且无法找回, 所以慎重使用
reset --hard
git log # 查看版本历史
git reflog --relative-date
# --soft
git reset --soft HEAD^ # 回退上一版本
# --hard
git reset --hard xxxxxx # 回退到指定xxxxxx版本
reset 参数 | |
---|
--soft | 回退版本后,之后的代码或文件转移到暂存区继续跟踪,等待commit |
--mixed(默认) | 回退版本后,之后提交的文件或代码在暂存区不跟踪了,转移到工作区,需要用add命令添加跟踪,然后再commit |
--hard | 回退版本后,之后添加的代码或文件文件全部清除,包括你编辑器里新写的代码也删除 |
分支操作
在使用 $Git$ 把当前分支合并到 $master$ 提示
Already up-to-date
,是因为当前分支和 $master$ 分支代码不同步
假设当前分支是:$main$,主分支是:$master$
git checkout master;
git reset --hard main;
git push --force origin master
删除本地分支
git branch -a # 查看本地分支
git checkout master # 切换到保留的分支
git branch -d main # 删除main分支
删除远端分支
git push remote_name -d remote_branch_name
$remote\_name$ 大多数情况下是 $origin$,$remote\_branch\_name$ 是远端分支名
git push origin -d main
与原 repo 同步
git remote -v
# 若是直接 clone 原仓库,则存在名为 origin 的远程仓库
# 若不是,则手动添加
git remote add upstream https://github.com/xxx.git
# 获取原仓库的更改
git fetch upstream
# 切换到想要同步的分支
git checkout master
# 合并原仓库的更改
git merge upstream/master
连接超时
ssh: connect to host github.com port 22: Connection timed out
# 对于windows,在 Git\etc\ssh 目录下的 ssh_config 文件中添加以下内容:
Host github.com
User git
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443
在 C:/Users/XXX/.ssh 目录下,known_hosts 文件会自动添加对应的公钥
一些设置
查看 $config$
git config -l
配置本机user和email
# 查看
git config user.name
git config user.email
# 设置
git config --global user.name "your name"
git config --global user.email "your email"
配置 $http/https$ 走代理
# 全局
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global http.proxy http://127.0.0.1:7897
git config --global https.proxy https://127.0.0.1:7897
git config --global --add http.proxy 'socks5://127.0.0.1:1080'
git config --global --add https.proxy 'socks5://127.0.0.1:1080'
# 临时
git -c http.proxy=http://127.0.0.1:7897 clone ...
git -c http.proxy=http://127.0.0.1:7897 push ...
git -c http.proxy=http://127.0.0.1:7897 pull ...
# 如果使用的是 Git Bash,可以通过环境变量设置代理
export http_proxy=http://127.0.0.1:7897
export https_proxy=http://127.0.0.1:7897
取消 $http/https$ 代理
git config --global --unset http.proxy
git config --global --unset https.proxy
有时候 $git\ push$ 卡住
# 设置全局的:
git config –global sendpack.sideband false
# 设置仓库的:
git config –local sendpack.sideband false