git常用指令 github版本回退 reset
常用git操作流程包括:克隆仓库、设置远程仓库、更新本地仓库、使用git fetch和git rebase进行更新,以及git reset命令的三种回退方式(-mixed、-soft、-hard)。此外,用户还介绍了如何回退本地和远程分支,删除远程分支的方法(包括设置receive.denyDeleteCurrent和删除远程分支后再push),以及学习资源链接。
常用流程
- 使用git进行克隆操作时,如果目标仓库已经是个人的克隆仓库,可以直接进行下一步操作
- 在克隆完成后切换到目标目录,然后添加远程仓库的分支,可以使用git remote add命令
- 推送操作可以使用git push命令,确保远程仓库的最新状态
- 每次更新时建议执行git fetch和git rebase操作,以保持本地仓库与远程仓库的同步
- 在删除远程提交时可以使用git push force命令,避免服务器拒绝落后情况
- 使用git重置命令可以回退到特定的分支状态
- git分支管理的详细说明
reset命令具有多种实现方式,其中包括:
- 将当前分支回退至上一个版本状态
- 回退apy这个文件的版本到上一个版本
- 向前回退至第3个版本
- 实现本地状态与远程分支同步
- 回退至特定版本
- 逆向操作上一次提交的状态
- 建立old_master分支作为备份
- 推送修改到远程仓库
- 回退本地仓库至指定版本
- 删减远程master分支
- 重新创建master分支
- 学习资源:
- 可以省略git add命令,通过git commit -a简化操作流程
常用流程
使用 git 命令克隆仓库,其中 xxx 是已有的分支,属于您自己的仓库。
cd到某个目录;git remote alias somemarks YYY(YYY是master的远程仓库,somemarks 是master的别名,用户可以根据需要自行定义)
3. push origin即可
每次更新自己的repo时,建议执行git fetch操作,以获取目标仓库的最新代码,随后进行git rebase操作,将本地分支合并至目标分支。
使用git reset --hard origin/master进行重置远程分支操作。在处理远程错误提交时,可以通过执行git push –force命令来避免服务器拒绝提交请求的延迟问题。
git分支详解
reset命令有3种方式:
git reset –mixed:此为默认行为,不带参数的git reset会回退到某个版本,仅保留源码,同时回退commit和index信息。
使用 git reset –soft 命令可以回退至特定 commit,仅恢复 commit 记录,不会恢复到 index 文件层次。如果需要提交,可以直接进行提交操作。
- 使用 git reset –hard 可以完全重置本地代码,将其恢复到指定 commit 状态。
回退所有内容到上一个版本
git reset HEAD^
回退a.py这个文件的版本到上一个版本
git reset HEAD^ a.py
向前回退到第3个版本
git reset –soft HEAD~3
将本地的状态回退到和远程的一样
将当前分支硬重置至 origin 分支的 master 头
将当前分支重头开始拉取至 FETCH 头
将当前分支硬重置至 origin 分支的 master 头
将当前分支硬重置至 origin 分支的 master 头
回退到某个版本
git reset 057d
恢复至上一次提交的状态,按照某一次提交操作的反向操作进行一次提交
git revert HEAD(easy way)
如果我们在某次修改中对某些内容进行了修改,并且已提交至本地仓库,同时已提交远程仓库。
这种情况下,我们想把本地和远程仓库都回退到某个版本,该怎么做呢?
git重置操作仅在本地仓库中进行版本回退,而远程仓库的版本保持不变。
在本地重置之后,如果再次拉取远程仓库,内容将与本地之前版本的内容进行merge。
这并不是我们想要的东西,这时可以有2种办法来解决这个问题:
在远程服务器的项目根目录中,执行git reset –soft 10efa以回滚10efa。请确保在执行此操作时,避免使用mixed或hard参数。
在本地删除远程 master 分支,然后将重置后的分支内容上传至远程仓库,如下:
新建old_master分支做备份
git branch old_master
push到远程
git push origin old_master:old_master
本地仓库回退到某个版本
git reset –hard bae168
删除远程的master分支
git push origin :master
重新创建master分支
git push origin master
复制代码
在删除远程master分支时,可能会有问题,见下:
$ git push origin :master
error: By default, deleting the current branch is denied, because the next
error: 'git clone' won't result in any file checked out, causing confusion.
error:
error: You can set 'receive.denyDeleteCurrent' configuration variable to
error: 'warn' or 'ignore' in the remote repository to allow deleting the
error: current branch, with or without a warning message.
error:
error: To squelch this message, you can set it to 'refuse'.
error: refusing to delete the current branch: refs/heads/master
To git@xx.sohu.com:gitosis_test
! [remote rejected] master (deletion of the current branch prohibited)
error: failed to push some refs to 'git@xx.sohu.com:gitosis_test'
此时,建议在远程仓库目录中配置git的receive delete-current选项。
git receive.denyDeleteCurrent warn
然后,就可以删除远程的master分支了
尽管存在以上两种方法可以回退远程分支的版本,但这些方式都存在较大的风险,操作时需格外谨慎。
学习资源:
GitHub Learn]
【GitHub Learn Path
- GitHub中从fork他人repo并最终要求合并到原项目的过称:
1、在github上点击fork按钮,此项目在你的repo中出现。
2、git clone (http或ssh协议),将此项目代码克隆到本地。这样就可以在本地进行代码的修改。
3、克隆到本地后,它默认的remote是你fork到你自己github上的repo(称为origin),而不是the repo you forked from.为了跟踪这个the repo you forked from,你需要cd 到你clone 到本地的repo文件夹下进行:
git remote add upstream http::(或是ssh),建立一个叫upstream(名字可以随便设)的remote.
4、若你fork的repo已经改变,使用:
git fetch upstream //fetch any changes fron the original reposity
git merge upstream/master //merge any changes fetched into your working files
或者直接用:
git pull upstream master
5、本地代码修改后首先:
git status //查看状态
git add <file> //将修改的file add以便commit
git commit -m "" //将add 提交并加上注释,此时是将本地仓库修改
6、最终
git push -u origin master也成功了
//现在是将修改推送到了自己的repo中,如果希望被合并,那么在github中进行pull request 操作即可。
使用git commit -a可以不用再git add
在本地仓库master中创建分支以进行修改,随后将其合并回master。使用git创建分支mybranch,然后切换至分支mybranch进行修改。使用git切换至分支mybranch进行修改。
或直接用
git checkout -b mybranch
在master和mybranch之间切换分支:通过git checkout切换到master,再切换到mybranch。
- 一旦你在mybranch中完成工作并打算合并到master中:
切换到 master 分支
将 mybranch 分支合并到 master 分支
然后删除 master 分支 //删除当前分支
因此流程为(均为双横线):
git pull –rebase [项目作者] [分支]
git branch [开发分支的名字]
git checkout [开发分支的名字]
...change sth...
git checkout master
git merge [开发分支的名字]
git commit -a -m “描述”
git branch -D [开发分支的名字]
git push –force
