前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【linux命令讲解大全】013.Git:分布式版本控制系统的先驱和常用命令清单(二)

【linux命令讲解大全】013.Git:分布式版本控制系统的先驱和常用命令清单(二)

作者头像
全栈若城
发布2024-03-02 11:26:00
770
发布2024-03-02 11:26:00
举报
文章被收录于专栏:若城技术专栏若城技术专栏

最简单放弃本地修改内容

代码语言:javascript
复制
如果有的修改以及加入暂存区的话
git reset --hard 
还原所有修改,不会删除新增的文件
git checkout . 
下面命令会删除新增的文件
git clean -xdf
通过存储暂存区stash,在删除暂存区的方法放弃本地修改。

git stash && git stash drop 

回滚到某个commit提交

代码语言:javascript
复制
git revert HEAD~1 # 撤销一条记录 会弹出 commit 编辑
git push # 提交回滚

回退到某一个版本

代码语言:javascript
复制
git reset --hard <hash>
例如 git reset --hard a3hd73r
--hard代表丢弃工作区的修改,让工作区与版本代码一模一样,与之对应,
--soft参数代表保留工作区的修改。

去掉某个commit

代码语言:javascript
复制
实质是新建了一个与原来完全相反的commit,抵消了原来commit的效果
git revert <commit-hash> 

新建一个空分支

代码语言:javascript
复制
这种方式新建的分支(gh-pages)是没有 commit 记录的
git checkout --orphan gh-pages
删除新建的gh-pages分支原本的内容,如果不删除,提交将作为当前分支的第一个commit
git rm -rf .
查看一下状态 有可能上面一条命令,没有删除还没有提交的的文件
git status 

合并多个commit

代码语言:javascript
复制
这个命令,将最近4个commit合并为1个,HEAD代表当前版本。
将进入VIM界面,你可以修改提交信息。
git rebase -i HEAD~4 
可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,
而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成
当前我们只要知道 pick 和 squash 这两个命令即可。
--> pick 的意思是要会执行这个 commit
--> squash 的意思是这个 commit 会被合并到前一个commit

我们将 需要保留的 这个 commit 前方的命令改成 squash 或 s,然后输入:wq以保存并退出
这是我们会看到 commit message 的编辑界面

其中, 非注释部分就是两次的 commit message, 你要做的就是将这两个修改成新的 commit message。

输入wq保存并推出, 再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。
将修改强制推送到前端
git push -f origin master

修改远程Commit记录

代码语言:javascript
复制
git commit --amend
amend只能修改没有提交到线上的,最后一次commit记录
git rebase -i HEAD~3
表示要修改当前版本的倒数第三次状态
将要更改的记录行首单词 pick 改为 edit
pick 96dc3f9 doc: Update quick-start.md
pick f1cce8a test(Transition):Add transition test (#47)
pick 6293516 feat(Divider): Add Divider component.
Rebase eeb03a4..6293516 onto eeb03a4 (3 commands)

Commands:
p, pick = use commit
r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but meld into previous commit
f, fixup = like "squash", but discard this commit's log message
x, exec = run command (the rest of the line) using shell
d, drop = remove commit
保存并退出,会弹出下面提示

You can amend the commit now, with

git commit --amend

Once you are satisfied with your changes, run

git rebase --continue

通过这条命令进入编辑页面更改commit,保存退出
git commit --amend
保存退出确认修改,继续执行 rebase, 
git rebase --continue
如果修改多条记录反复执行上面两条命令直到完成所有修改

最后,确保别人没有提交进行push,最好不要加 -f 强制推送
git push -f origin master

添加忽略文件

代码语言:javascript
复制
echo node_modules/ >> .gitignore

利用commit关闭一个issue

代码语言:javascript
复制
这个功能在Github上可以玩儿,Gitlab上特别老的版本不能玩儿哦,那么如何跟随着commit关闭一个issue呢? 在confirm merge的时候可以使用一下命令来关闭相关issue:

fixes #xxx、 fixed #xxx、 fix #xxx、 closes #xxx、 close #xxx、 closed #xxx、

同步fork的上游仓库

代码语言:javascript
复制
Github教程同步fork教程,在Github上同步一个分支(fork)

设置添加多个远程仓库地址。

在同步之前,需要创建一个远程点指向上游仓库(repo).如果你已经派生了一个原始仓库,可以按照如下方法做。

$ git remote -v
List the current remotes (列出当前远程仓库)
origin  https://github.com/user/repo.git (fetch)
origin  https://github.com/user/repo.git (push)
$ git remote add upstream https://github.com/otheruser/repo.git
Set a new remote (设置一个新的远程仓库)
$ git remote -v
Verify new remote (验证新的原唱仓库)
origin    https://github.com/user/repo.git (fetch)
origin    https://github.com/user/repo.git (push)
upstream  https://github.com/otheruser/repo.git (fetch)
upstream  https://github.com/otheruser/repo.git (push)

同步更新仓库内容

代码语言:javascript
复制
同步上游仓库到你的仓库需要执行两步:首先你需要从远程拉去,之后你需要合并你希望的分支到你的本地副本分支。从上游的存储库中提取分支以及各自的提交内容。 master 将被存储在本地分支机构 upstream/master

git fetch upstream
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 62 (delta 27), reused 44 (delta 9)
Unpacking objects: 100% (62/62), done.
From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
 * [new branch]      master     -> upstream/master
检查你的 fork’s 本地 master 分支

git checkout master
Switched to branch 'master'
合并来自 upstream/master 的更改到本地 master 分支上。 这使你的前 fork’s master 分支与上游资源库同步,而不会丢失你本地修改。

git merge upstream/master
Updating a422352..5fdff0f
Fast-forward
 README                    |    9 -------
 README.md                 |    7 ++++++
 2 files changed, 7 insertions(+), 9 deletions(-)
 delete mode 100644 README
 create mode 100644 README.md

批量修改历史commit中的名字和邮箱

  1. 克隆仓库

注意参数,这个不是普通的clone,clone下来的仓库并不能参与开发

代码语言:javascript
复制
git clone --bare https://github.com/user/repo.git
cd repo.git
  1. 命令行中运行代码
代码语言:javascript
复制
OLD_EMAIL原来的邮箱
CORRECT_NAME更正的名字
CORRECT_EMAIL更正的邮箱

将下面代码复制放到命令行中执行

git filter-branch -f --env-filter '
OLD_EMAIL="wowohoo@qq.com"
CORRECT_NAME="小弟调调"
CORRECT_EMAIL="更正的邮箱@qq.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

执行过程

代码语言:javascript
复制
Rewrite 160d4df2689ff6df3820563bfd13b5f1fb9ba832 (479/508) (16 seconds passed, remaining 0 predicted)
Ref 'refs/heads/dev' was rewritten
Ref 'refs/heads/master' was rewritten
  1. 同步到远程仓库

同步到push远程git仓库

代码语言:javascript
复制
git push --force --tags origin 'refs/heads/*'

我还遇到了如下面错误,lab默认给master分支加了保护,不允许强制覆盖。Project(项目)->Setting->Repository 菜单下面的Protected branches把master的保护去掉就可以了。修改完之后,建议把master的保护再加回来,毕竟强推不是件好事。

代码语言:javascript
复制
remote: GitLab: You are not allowed to force push code to a protected branch on this project.

当上面的push 不上去的时候,先 git pull 确保最新代码

代码语言:javascript
复制
git pull  --allow-unrelated-histories

或者指定分枝

代码语言:javascript
复制
git pull origin master --allow-unrelated-histories
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最简单放弃本地修改内容
  • 回滚到某个commit提交
  • 回退到某一个版本
  • 去掉某个commit
  • 新建一个空分支
  • 合并多个commit
  • 修改远程Commit记录
  • 添加忽略文件
  • 利用commit关闭一个issue
  • 同步fork的上游仓库
  • 同步更新仓库内容
  • 批量修改历史commit中的名字和邮箱
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档