git 版本管理工具
git 项目操作流程
git clone [url]
克隆项目 / git pull 拉取最新代码git remote
查看是否有远程仓库- 没有远程仓库 --->
git remote add [远程仓库名] [远程地址]
配置远程仓库 git branch -b [新分支名]
创建新的分支,在新分支上修改代码git add .
提交git commit -m '描述'
提交git checkout [分支名]
切换到要合并的分支git merge [分支名]
把修改代码的分支合并到当前分支git push [远程仓库名] [分支名]
提交到远程仓库git branch -d [分支名]
删除之前修改代码的分支,删之前先 branch 查看
或
git clone [url]
克隆代码git checkout [分支名]
切换到最新的开发分支,如git checkou dev
git checkout -b [分支名]
将当前分支复制到新的分支进行开发,如git checkout -b my_dev
提交代码前先更新远程的代码,但如果当前分支修改了代码没有提交,更新下来的代码可能会导致与当前未提交的代码冲突或被覆盖。
git stash
将当前修改但未提交的代码弹出git pull
或git pull origin [分支名]
更新代码git stash pop
将弹出的代码取出git add .
git commit -m '描述'
git push
配置 ssh
sh
git config -l // 查看配置
git config --system --list // 查看系统的配置 安装目录 Git\etc\gitconfig
git config --global --list // 查看用户的配置 用户目录 C:\Users\Administrator\ .gitconfig
git config --global user.name "用户名" // 用户名
git config --global user.email "邮箱" // 邮箱
// ssh-keygen 生成公钥 C:\Users\Administrator\.ssh 目录 实现免密码登录!
ssh-keygen -t rsa -C '邮箱' // rsa加密 两个文件 .pub 公共的公钥,另一个私钥
配置代理
- http/https 代理
sh
git config --global http.proxy http://127.0.0.1:10809
git config --global https.proxy https://127.0.0.1:10809
- socks5 代理
sh
git config --global http.proxy 'socks5://127.0.0.1:10808'
git config --global https.proxy 'socks5://127.0.0.1:10808'
- 取消代理
sh
git config --global --unset http.proxy
git config --global --unset https.proxy
建立版本库
sh
git clone <url> 克隆远程版本库
git init 初始化一个 git 仓库
分支
sh
git branch 查看本地所有分支
git branch -r 列出所有远程分支
git branch -va 查看本地+远程所有分支
git checkout [分支名] 切换到某个分支上
git checkout -b [新分支名] 创建新分支并选择到新分支
git branch [分支名] 新建一个分支,但依然停留在当前分支
git merge [分支名] --no-ff 将分支合并到当前分支上
git branch -D [分支名] 删除分支
git push origin --delete [分支名] 删除远端分支
修改和提交
sh
git status 查看当前仓库状态
git diff 查看变更内容
git add [路径] 添加多个文件跟踪
git commit -m '描述' 提交文件到仓库
远程操作
sh
git pull 拉取最新代码合并
git remote 查看当前项目配置的远程仓库
git remote add [远程仓库名称] [远程地址] 配置远程仓库地址
git push [远程仓库名称] [分支名] 指定分支推送到指定远程仓库
git push [远程仓库名] --delete [分支名] 删除远程分支
git branch -dr [远程仓库名/分支名] 删除远程分支
版本控制
sh
// [HEAD表示当前版本 HEAD^上一版本 HEAD^^上上一版本 ..以此类推]
git log 查看历史提交记录
git log --pretty=oneline 查看历史提交记录[显示信息简化]
git reset --hard HEAD^ 回退到上一版本
// git reset --hard '1094a' 回到未来,可以使用未来的版本号前几位数快进
git reflog 查看记录每次的命令
cat <readme.txt> 查看 readme.txt版本是否被回退
标签
sh
git tag # 列出所有tag
git tag [tag] # 新建一个tag在当前commit
git tag [tag] [commit] # 新建一个tag在指定commit
git tag -d [tag] # 删除本地tag
git push origin :refs/tags/[tagName] # 删除远程tag
git show [tag] # 查看tag信息
git push [remote] [tag] # 提交指定tag
git push [remote] --tags # 提交所有tag
git checkout -b [branch] [tag] # 新建一个分支,指向某个tag
重置为新仓库
git checkout --orphan latest_branch
迁出git add -A
追踪所有文件git commit -am "commit message"
填写提交信息git branch -D master
删除旧分支git branch -m master
重命名当前分支为主分支git push -f origin master
强制推送
git rebase 合并 commit
要将 commit -m "a"
、commit -m "b"
和 commit -m "d"
合并为一个提交,同时保留 commit -m "c"
,可以按照以下步骤操作:
1. 查看提交历史
首先查看最近的提交历史,找到需要合并的提交范围:
bash
git log --oneline
假设结果如下:
d4f89cd (HEAD -> main) d
c3e82ab c
a1b456b b
9f123ab a
2. 交互式变基
启动交互式变基,将涉及的提交纳入变基范围:
bash
git rebase -i HEAD~4
HEAD~4
表示处理最近的 4 次提交(a
、b
、c
、d
)。
3. 编辑提交列表
进入编辑界面后会显示:
pick 9f123ab a
pick a1b456b b
pick c3e82ab c
pick d4f89cd d
将 a
、b
和 d
的第二行及之后的 pick
修改为 squash
或 s
,如下:
pick 9f123ab a
squash a1b456b b
pick c3e82ab c
squash d4f89cd d
4. 编辑合并后的提交信息
Git 会提示你编辑合并后的提交信息。你可以将 a
、b
和 d
的说明合并成一个,或者保留默认内容。
例如:
# This is a combination of 3 commits.
# The first commit's message is:
a
# The following commit message will be included:
b
d
你可以修改为:
a + b + d
5. 完成变基
保存并退出编辑器后,Git 会自动完成变基。如果没有冲突,操作会成功。
6. 强制推送到远程(如果已推送过)
由于修改了提交历史,需要强制推送到远程分支:
bash
git push --force
注意事项
- 保留
c
:变基时确保pick c3e82ab c
不被修改,它会保持独立。 - 协作分支警告:如果其他人也在使用这个分支,强制推送可能导致问题,需沟通后再操作。
Linux 命令
sh
cd // 改变目录。
cd .. // 回退到上一个目录,直接cd进入默认目录
pwd // 显示当前所在的目录路径。
ls(ll) // 都是列出当前目录中的所有文件,只不过 ll(两个 ll)列出的内容更为详细。
touch // 新建一个文件 如 touch index.js 就会在当前目录下新建一个 index.js 文件。
rm // 删除一个文件, rm index.js 就会把 index.js 文件删除。
mkdir // 新建一个目录,就是新建一个文件夹。
rm -r // 删除一个文件夹, rm -r src 删除src目录
rm -rf / // 切勿在Linux中尝试!删除电脑中全部文件!
mv // 移动文件, mv index.html src index.html 是要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。
reset // 重新初始化终端/清屏。
clear // 清屏。
history // 查看命令历史。
help // 帮助。
exit // 退出。
\## // 表示注释