Git使用

搞乱了强制恢复:

git checkout master   # 切换到本地的master分支

git fetch upstream master 

git reset --hard f2eac5df1840b65b24 # 将本地分支强制设到upstream/master的自己改动之前的那个分支

git rebase upstream/master

git branch -D dev5 # 强制删除本地dev5分支

git checkout -b dev5 --track master # 新建一个分支(也许不需要--track master更好!)

git branch --unset-upstream (估计是取消和master的关系)

git push -f --set-upstream origin dev5 # 和远程dev5建立关系,推到远程;

查看本地所对应的远程URL:

git config --get remote.origin.url

git remote -v 更好使

查看本地分支对应的远程分支:

git branch -vv

将本地分支推送到远程分支并建立对应关系:

git push --set-upstream remote_repo_name branch_name

当我想从远程仓库里拉取一条本地不存在的分支时:(先用git config --get remote.origin.url确认origin是不是自己想要的)

git checkout -b 本地分支名 origin/远程分支名
和上游分支建立联系:
git branch --set-upstream-to=origin/master

git fetch upstream master

git rebase upstream/master

loop:

    <Update local files>

    git add .

    git rebase --continue

git push origin dev5 -f

首先clone fork出来的仓库到本地

git clone git@github.com:123/456.git

在 fork 的代码库中添加上游代码库的 remote 源

git remote add upstream git@github.com:789/456.git

获取原始仓库分支和对应的提交

git fetch upstream master

在本地实现与upstream的同步(之前一定要先checkout到{branch name}所指定的branch)

git rebase upstream/master 

解决冲突:

loop:

    <Update local files>

    git add .

    git rebase --continue

推送自己的本地仓库到自己的远程仓库

git push -f

合并PR里的多个commit: (git rebase -i <earliest-commit-version>)

「Git」合并多个 Commit - 简书

git push -f

cherry-pick:

拉取要往上merge的upstream分支(一般是upstream/master),切换到上面

git checkout -b <name> 建立本地分支 (此时此新分支和upstream/master完全一致)

git fetch XXX branch_name 从远端拉取包含要cherry pick的commits们的分支;

git cherry-pick commit_id(即那个commit的hash id)

也可重复上面的cherry-pick多次,提交多个commit_id

git push到自己的远程分支

提交PR到upstream/master

注意:如果分成多次PR来提交,这些PR之间可能会有冲突,人家老大们merge的时候就要很麻烦的解决冲突;保险起见全部放到1个PR里最为稳妥;

带third-party等子目录的PR提交

先找到子目录对应的项目A,fork一个自己的repo,将这部分改动提交PR到子项目A

使用git submodule update命令,提交一个PR到主项目B上,merge后,会发现主项目的子目录后面的hash码变成了自己提交后那个hash码;

进行主项目部分的代码改动,提交PR至主项目;

git submodule的原理:链接更清晰的版本,先第3步拉取远程子项目,再用commit/push更新主目录的记录;

其实就是:

1. 先独立更新子项目并commit、push;提交这个PR到源头子项目;

2. 在父项目的子项目目录里,git fetch远程master,并checkout到master;

3. 在父项目的根目录里,用git diff可以看到子项目的commit-id发生了变化;使用git add和git commit和git push将子目录提交;提交这个PR到源头父项目;

4. 独立更新父项目并commit、push;提交这个PR到源头父项目;

其中3和4的PR,可以并行提交上去;

带third-party等子目录的PR运行CI:

主项目里:

        git submodule update

        修改.gitmodules里的子项目对应的URL

        git submodule sync

子项目里(pytorch/third_party/kineto):

        git pull

        git checkout 要修改的分支

cd至pytorch/third_party:

        git add -u

        git diff --cached    (可以看到加进去了)

cd至主项目目录:

        git commit

        git push

Git回滚代码到某个commit

回退命令:

$ git reset --hard HEAD^ 回退到上个版本
$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id 退到/进到 指定commit的sha码

强推到远程:

$ git push origin HEAD --force

================================================

1. #git log     //找到需要回滚的commit-id,或者在gitlab上查看也可以

2.#git reset –hard (commit-id)     //回退到某次commit

3.#git push -f origin ( branch-name )    //强制推送到分支上

完工,然后到gitlab上去查看相应的分支是否回退了

回退到之前的一个commit
git reset --hard <commitID>

Git pull 强制覆盖本地文件

git fetch --all  
git reset --hard origin/master 
git pull
git fetch 只是下载远程的库的内容,不做任何的合并 git reset 把HEAD指向刚刚下载的最新的版本

和git pull等价的命令:

git fetch 命令:

$ git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
  • 如果只想取回特定分支的更新,可以指定分支名:
$ git fetch <远程主机名> <分支名> //注意之间有空格
  • 最常见的命令如取回origin 主机的master 分支:
$ git fetch origin master
  • 取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:
$ git log -p FETCH_HEAD

我们可以通过这些信息来判断是否产生冲突,以确定是否将更新merge到当前分支。

git merge FETCH_HEAD //将拉取下来的最新内容合并到当前所在的分支中

merge完,用git add和git commit和git push提交到远程;

比较2个brach的差异:

git diff dedup..upstream/master

在github上比较2个commit的差异:(前面405e092是基准版本)

https://github.com/my_git_name/my_repo_name/compare/405e092..d93b3f8

跨越repo的比较:Comparing commits - GitHub Docs

Git从入门到熟练使用

Git最常用功能,这一篇就够了!(结合开发场景)

Git常用基本操作

  • 工作目录 Working Directory :对项目的某个版本独立提取出来的内容,这些从Git仓库的压缩数据库提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区域 Staging Area :是一个文件,保存了下次将提交的文件列表,是待提交文件的暂存区域。一般在Git仓库的目录中,有时也被称为索引。
  • 本地Git仓库
  • 远程Git仓库

Git常用命令及方法大全(分支管理策略)

只拉取部分repo的方法

参考资料:Git sparse-checkout 检出指定目录或文件 - Pekkle - 博客园

Git sparse-checkout 检出指定目录或文件_java爱好者的博客-CSDN博客
 

# 初始化git仓库并进入
git init planning 
cd planning 

# 允许sparse checkout
git config core.sparsecheckout true

# 只checkout planning文件夹
echo planning >> .git/info/sparse-checkout

# 设置远程仓库地址并拉取
git remote add origin https://xiaobingai@dev.azure.com/xiaobingai/TopSearch/_git/TopSearch
git pull origin master

只clone一层(不包换历史commit),只克隆master:

git clone --depth 1 --branch master https://XXX

另一种拉取远程分支的方法:

git pull origin gaoteng/branch_A:gaoteng/branch_A

然后手动git checkout gaoteng/branch_A

只比较一个文件:

git diff gaoteng/add-profiling~0:live-backend/util/profiler.py util/profiler.py

前面是分支里的文件,后者是当前目录里的文件;

  • 14
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值