Git常用命令——新手适用
详情见官网:https://git-scm.com/docs
一、提交代码的流程
pull:是下拉代码,相等于将远程的代码下载到你本地,与你本地的代码合并
push:是推代码,将你的代码上传到远程的动作
完整的流程是:
第一种方法:(简单易懂)
1、git add .(后面有一个点,意思是将你本地所有修改了的文件添加到暂存区)
2、git commit -m""(引号里面是你的介绍,就是你的这次的提交是什么内容,便于你以后查看,这个是将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中)
3、git pull origin master 这是下拉代码,将远程最新的代码先跟你本地的代码合并一下,如果确定远程没有更新,可以不用这个,最好是每次都执行以下,完成之后打开代码查看有没有冲突,并解决,如果有冲突解决完成以后再次执行1跟2的操作
4、git push origin master 将代码推至远程就可以了
第二种方法:
1、git stash (这是将本地代码回滚值至上一次提交的时候,就是没有你新改的代码)
2、git pull origin master(将远程的拉下来)
3、git stash pop(将第一步回滚的代码释放出来,相等于将你修改的代码与下拉的代码合并)
然后解决冲突,你本地的代码将会是最新的代码
4、git add .
5、git commit -m""
6、git push origin master
这几步将代码推至了远程
最后再git pull origin master 一下,确保远程的全部拉下来,有的你刚提交完有人又提交了,你再拉一下会避免比的不是最新的问题
转自:https://www.cnblogs.com/zhanglingbing/p/9391098.html
其他:
推送到分支:
git push origin master:my_remote_new_branch
二、git撤销本地修改与回退版本
1. 使用 git checkout
撤销本地修改
即放弃对本地已修改但尚未提交的文件的修改,还原其到未修改前的状态。
注意: 已 add
/ commit
的文件不适用个方法,应该git reset,参照以下。
命令如下:
git checkout . # 撤销对所有已修改但未提交的文件的修改,但不包括新增的文件
git checkout [filename] # 撤销对指定文件的修改,[filename]为文件名
2.使用git clean 删除未跟踪的文件
详情见官网:https://git-scm.com/docs/git-clean
3. 使用 git reset
回退项目版本:git reset 删除的是已跟踪的文件,将已commit的回退。
可以回退到任意已经提交过的版本。已 add
/ commit
但未 push
的文件也适用。
命令如下:
git reset --hard [commit-hashcode]
# [commit-hashcode]是某个 commit 的哈希值,可以用 git log 查看
--mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^
和 git reset HEAD^
效果是一样的。
--soft
不删除工作空间改动代码,撤销commit,不撤销git add .
--hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,会删除工作空间代码!!!恢复到上一次的commit状态。
reset后推送到远程分支
若想撤销后对远程分支有效,可按以下方式操作:
方法一:
1、新建backup分支 作为备份,以防万一
git branch backup
2、将本地的backup分支 推送到远程的backup
git push origin backup:backup
3、本地仓库彻底回退到xxxxx版本,xxxxx版本之后的commit信息将丢失
git reset --hard xxxxx
4、删除远程的master分支 (注意master前有个:)
git push origin :master
主要远程仓库的master如果是保护分支将报错,请去掉对分支的保护设置:
remote: GitLab: You are allowed to deleted protected branches from this project. To http://gitlab.mogujie.org/shihao/afanty.git ! [remote rejected] master (pre-receive hook declined) error: failed to push some refs to 'http://gitlab.mogujie.org/xxxx/xxxx.git'
5、重新创建远程master分支(这跟第1次提交本地代码库给远程仓库的命令一样)
git push origin master
方法二:
1、本地代码回滚到上一版本(或者指定版本)
git reset --hard HEAD~1
2、加入-f参数,强制提交,远程端将强制跟新到reset版本
git push -f
四、问题:Please enter a commit message to explain why this merge is necessary, especially if it merges an updated upstream into a topic branch
- press "i" (i for insert)
- write your merge message
- press "esc" (escape)
- write ":wq" (write & quit)
- then press enter
五、问题 the size of file 'xx' has exceeded the upper limited size (50 mb) in commit 'xx'
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch 文件所在路径/文件名'
若提示:
则先将未提交的取消暂存:
git reset HEAD
将提示需要暂存的文件备份后回退本地的修改(一定要记得备份,不然就没了!):
git checkout .
再次执行就可以Rewrite了:
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch 文件所在路径/文件名'
五、git创建本地分支以及将本地分支推送到远程分支
现在我在master分支上,工作目标是干净的,也没有需要commit的:
$ git branch * master release $ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean
新建一个本地分支:
git checkout -b dbg_lichen_star
查看一下现在的分支状态:
$ git branch * dbg_lichen_star master release
星号(*)表示当前所在分支。现在的状态是成功创建的新的分支并且已经切换到新分支上。
把新建的本地分支push到远程服务器,远程分支与本地分支同名(当然可以随意起名):
git push origin dbg_lichen_star:dbg_lichen_star
使用git branch -a
查看所有分支,会看到remotes/origin/dbg_lichen_star
这个远程分支,说明新建远程分支成功。
六、如何删除本地分支和远程分支
转自:https://chinese.freecodecamp.org/news/how-to-delete-a-git-branch-both-locally-and-remotely/
小乌龟删除参照:https://www.jianshu.com/p/e0da2720372a
用两行命令删除分支
// 删除本地分支 git branch -d localBranchName // 删除远程分支 git push origin --delete remoteBranchName
什么时候需要删除分支
一个 Git 仓库常常有不同的分支,开发者可以在各个分支处理不同的特性,或者在不影响主代码库的情况下修复 bug。
仓库常常有一个 master
分支,表示主代码库。开发人员创建其他分支,处理不同的特性。
开发人员完成处理一个特性之后,常常会删除相应的分支。
本地删除分支
如果你还在一个分支上,那么 Git 是不允许你删除这个分支的。所以,请记得退出分支:git checkout master
。
通过 git branch -d <branch>
删除一个分支,比如:git branch -d fix/authentication
。
当一个分支被推送并合并到远程分支后,-d
才会本地删除该分支。如果一个分支还没有被推送或者合并,那么可以使用-D
强制删除它。
这就是本地删除分支的方法。
远程删除分支
使用这个命令可以远程删除分支:git push <remote> --delete <branch>
。
比如: git push origin --delete fix/authentication
,这个分支就被远程删除了。
你也可以使用这行简短的命令来远程删除分支:git push <remote> :<branch>
,比如:git push origin :fix/authentication
。(推送一个空分支到远程分支,其实就相当于删除远程分支)
如果你得到以下错误消息,可能是因为其他人已经删除了这个分支。
error: unable to push to unqualified destination: remoteBranchName The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. error: failed to push some refs to 'git@repository_name'
使用以下命令同步分支列表:
git fetch -p
-p
的意思是“精简”。这样,你的分支列表里就不会显示已远程被删除的分支了。
七、git cherry-pick 合并部分提交
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。
这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge
)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。
基本用法
git cherry-pick
命令的作用,就是将指定的提交(commit)应用于其他分支。
git cherry-pick <commitHash>
上面命令就会将指定的提交commitHash
,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。
举例来说,代码仓库有master
和feature
两个分支。
现在将提交f
应用到master
分支。
# 切换到 master 分支
$ git checkout master
# Cherry pick 操作
$ git cherry-pick f
上面的操作完成以后,代码库就变成了下面的样子。
从上面可以看到,master
分支的末尾增加了一个提交f
。
git cherry-pick
命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。
git cherry-pick feature
上面代码表示将feature
分支的最近一次提交,转移到当前分支。
转移多个提交
Cherry pick 支持一次转移多个提交。
git cherry-pick <HashA> <HashB>
上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交。
如果想要转移一系列的连续提交,可以使用下面的简便语法。
git cherry-pick A..B
上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。
注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。
git cherry-pick A^..B
更多参考:https://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html
八、fork的项目如何同步仓库源的最新更新
将别人的项目代码fork到自己的远程仓库时,和别人的代码就没有关联了,当需要更新别人的代码时就需要建立关联。
//查看项目远程仓库配置,如果没有源的地址则新增 git remote -v //添加源项目地址 git remote add tata(随便一个名称) url(源项目名称) //确认是否添加成功 git remote -v //获取源项目的更新 git fetch tata //查看所有分支 git branch //合并tata/master分支的变化到本地master分支 git merge tata/master //这里仅将fork源仓库更新到本地仓库,如果要更新远程fork仓库,必须向远程push一次 git push origin master