在远程创建一个分支, 这个分支名称就叫做:fly_cold_recall_MuDaDa_log
------------------------------方法1 begin ------------------------------
1,从已有的分支创建新的分支(如从master分支),创建一个dev分支
git checkout -b fly_cold_recall_MuDaDa_log
2,创建完可以查看一下,分支已经切换到dev
3,提交该分支到远程仓库
git push origin fly_cold_recall_MuDaDa_log
4,测试从远程获取dev
git pull origin fly_cold_recall_MuDaDa_log
5:如果你的代码相比你base上修改的有所变更,那么你还需要add,commit,push一次,这样在远程新建分支上面你才能看到真正与本地新建分支的代码保持一致,
否则,你远程的分支还是老版本代码。
------------------------------方法1 end ------------------------------
------------------------------方法2 begin ------------------------------
如果用命令行,运行 git fetch,可以将远程分支信息获取到本地,再运行 git checkout -b local-branchname /remote_branchname 就可以将远程分支映射到本地命名为local-branchname 的一分支
1,我觉得现在重要的就是设置git push,pull默认的提交获取分支,这样就很方便的使用git push 提交信息或git pull获取信息
git branch --set-upstream-to=/fly_cold_recall_MuDaDa_log
取消对master的跟踪
git branch --unset-upstream master
2,现在随便修改一下工程文件的内容,然后git commit ,git push,之后就可以直接提交到远程的dev分支中,而不会是master
原文地址:https://blog.csdn.net/zengxiaosen/article/details/72628724
3.删除远程分支
git push :fly_cold_recall_MuDaDa_log
------------------------------方法2 end ------------------------------
更新远程代码
如果你的代码不是新的,就需要时时更新你的代码
直接git pull 会提示,红字的部分其实就是分支名:git pull git branch --set-upstream-to=/ fly_cold_recall_MuDaDa_log
git pull git branch --set-upstream-to=/fly_cold_recall_MuDaDa_log fly_cold_recall_MuDaDa_log
首先更新远程分支的列表:
git remote update --prune
git checkout /feature/2021-05-18/story_fly_mer
git branch
git pull feature/2021-05-18/story_fly_mer
********************************************** 远程同步 begin **********************************************
git同步远程仓库分支
1.何谓同步远程分支?有下面几种情况,
1.本地有新分支,远程仓库没有。
2.远程仓库有新分支,本地没有。
3.本地删除了分支,远程也想删除。
4.远程删除了分支,本地也想删除。
第一种情况很好解决,将本地分支推送到远程仓库即可。
本文主要讲解后面几种情况的解决办法。
2.第二种情况:远程仓库有新分支,本地没有。
这在之前我先介绍几个命令。
1.将某个远程主机的更新,全部取回本地:git fetch
2.查看远程分支:git branch -a
3.查看本地分支:git branch
4.切换分支:git checkout 分支
熟悉了以上命令,接下来我们通过一个例子来讲解第二种情况的解决办法。
假如我本地有个git仓库,别人推送了一个新分支到远程仓库,我要获取这个分支到本地,该怎么办?
1.我需要git branch查看一下本地分支,再git branch -a查看一下远程分支,对比下,远程存在哪些本地没有的新分支。但发现,本地和远
程的一样。奇怪,在远程仓库(gitlab/github)明明看到了新分支啊。
原来现在本地上的现在的远程分支记录是克隆仓库时当时的分支记录。所以我需要
1.首先将某个远程主机的更新,全部取回本地:git fetch
2.再次查看远程分支:git branch -a 发现远程的分支已经可以看见了。
3.然后拉取远程分支到本地:git checkout -b 远程分支名 origin/远程分支名
注:直接克隆整个仓库,可以直接使用git checkout 分支名切换到分支。因为克隆时候已经有远程所有的分支记录。但若之前已经克隆过,后来其他电脑新push一个分支,此时是无法切换到新分支的。使用上述命令可拉取最新分支(原理是在本地新建一个分支和远程分支关联起来)
3.第三种情况:本地删除了分支,远程也想删除。
这在之前我先介绍几个命令。
1.删除远程分支: git push origin -d 分支名
2.删除本地分支: git branch -D 分支名
熟悉了以上命令,接下来我们通过一个例子来讲解第三种情况的解决办法。
假如我在本地想要删除某个分支,我也想把远程仓库的这个分支也要删掉怎么办?
1.使用git branch -d 分支名来删除本地分支。
2.使用git push origin -d 分支名直接来删除远程分支。在次使用git branch -a,发现分支已经不存在了。
或者
1.使用git branch -d 分支名来删除本地分支。
2.最简单的解决办法就是直接到gitlab/github进行删除.
4.第四种情况:远程删除了分支,本地也想删除。。
这在之前我先介绍几个命令。
1.查看远程分支和本地分支的对应关系:git remote show origin
2.删除远程已经删除过的分支:git remote prune origin
熟悉了以上命令,接下来我们通过一个例子来讲解第四种情况的解决办法。
假如我直接到gitlab/github删除了某个分支,我在本地使用git branch -a查看远程分支,依然存在并且可以切换使用。我本地也想把远程分支记录删除怎么办?
1.git branch -a查看远程分支,红色的是本地远程远程分支记录。
2.执行下面命令查看远程仓库分支和本地仓库的远程分支记录的对应关系:
git remote show origin
3.会看到:
refs/remotes/origin/远程仓库已经删除的分支名 stale (use ‘git remote prune’ to remove)
其中:
Local refs configured for ‘git push’: 命令下面的分支是本地仓库的远程分支记录中仍存在的分支,但远程仓库已经不存在。
4.输入git remote prune origin来删除远程仓库已经删除过的分支
5.验证 git branch -a
此时可以看到本地远程分支记录已经和远程仓库保持一致了。
********************************************** 远程同步 end **********************************************
远程仓库有新分支,本地没有
比如,现在有一个开发者在远程新建了一条分支,我现在要在本地上创建一条分支:
以 feature/2021-05-19/unit_creative_factor_support_new_source 这条分支为例子:
git fetch 的目的是同步一下远程分支库,否则git branch -a这个命令show的结果是旧的记录
git fetch
git branch -a | grep feature/2021-05-19/unit_creative_factor_support_new_source
git checkout feature/2021-05-19/unit_creative_factor_support_new_source
********************************************** 版本回退 begin **********************************************
三、解决方法
方法一:git reset
原理: git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本一:
适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
具体操作:
也可以在github网站上查看:
再用“git log”查看版本信息,此时本地的HEAD已经指向之前的版本:
所以我们要用“git push -f”强制推上去,就可以了:
git push origin HEAD:feature/2021-06-15/dpa_product_split_MuDaDa_log -f
在github图形化界面上看,远程库的HEAD也已经指向目标版本:
********************************************** 版本回退 end **********************************************
********************************************** 合并部分文件 begin**********************************************
git merge 指定文件到当前分支
通常我们合并另外分支的代码采用 git merge XXX(分支名) 命令就可以了,但是由于某些原因有时需要只合并一部分指定文件,而merge命令会合并所有的代码,这时就不能满足我们需求了,我们可以使用checkout命令来实现merge指定文件。
git checkout xxx(分支名) xxx1(文件名1) xxx2(文件名2) xxx3(文件名3)
git status
git add*
git commit -m’merge xxx’
git push
********************************************** 合并部分文件 end **********************************************
********************************************** 随时保证自己的代码在最新的分支上开发 begin **********************************************
例如现在有两个分支 master 和 feature, 你在 feature 分支上进行了实验,这时候有个另外的人在 master 分支上进行了新的提交。那么你需要将 master上别人的修改应用到 feature 分支上。
方法1: merge
git checkout feature
git merge master
git merge master feature
这样操作后会在 feature 分支上产生一个新的 commit, 这个commit就是包含了 master 分支的修改。同时历史记录中也会包含这个 commit 的信息。这样会有个好处,也会带来问题。
好处就是:merge 是 non-destructive 的操作,比较安全。(相对于rebase操作)
问题就是:如果merge频繁,那么 feature 分支的历史记录中会包含很多个由于 merge 产生的新 commit 信息。这可能不是你希望看到了…)。
如图:
方法2: rebase(MuDaDa重点推荐)
前期准备:保证两个分支在本地和远程都是同步最新的:第一条命令:$git checkout master $git pull
git checkout feature
git rebase master // 将 master 上的修改合并到 feature 分支(当前分支)。
rebase 会将 feature 上的历史 commit 全部修改,并且用新的提交覆盖之(即下图中的 Brand New Commit)。
看起来就是你的 feature 分支从一个开始就是在最新的 master 上开发的( 新的master跑到了你分支的最开始处 )。
如图(注意比较与上图 merge 的差异):
一个注意点就是不要将 master 分支 rebase 到其他分支上面。这样会导致该 master 分支和其他人的 master 分支的历史记录不一样。然后你还得将你的 master 分支与别人的master分支merge。
所以,在 rebase 一个分支前想一下别人有没有 watch 这个分支, 因为rebase 会将该分支的历史提交修改。
********************************************** 随时保证自己的代码在最新的分支上开发 end **********************************************
********************************************** git rebase begin **********************************************
********************************************** git 如何取消add操作 begin **********************************************
********************************************** git如何取消add操作 begin **********************************************
可以直接使用命令 git reset HEAD(MuDaDa 推荐)
这个是整体回到上次一次操作
绿字变红字(撤销add)
如果是某个文件回滚到上一次操作: git reset HEAD 文件名
红字变无 (撤销没add修改)
git checkout – 文件
********************************************** git如何取消add操作 end **********************************************
********************************************** git删除已经add的文件 begin **********************************************
使用 git rm 命令即可,有两种选择,
一种是 git rm --cached “文件路径”,不删除物理文件,仅将该文件从缓存中删除;
一种是 git rm --f “文件路径”,不仅将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶)
********************************************** git删除已经add的文件 end **********************************************
********************************************** git 不追踪某些文件 begin **********************************************
在分支下添加:
$touch .gitignore
$vim .gitignore
eg:
*.tt
*.txt
*DS_Store
保存退出
以后每次add *的时候都不会添加这些文件到暂存区了
********************************************** git 不追踪某些文件 end **********************************************
******************** git强制更新已经更改的东西 begin **************************
如果更改了本地的文件,就无法切换到其他分支,报错如下
Please commit your changes or stash them before you switch branches.
方法一:stash
git stash
git pull
git stash pop
方法二:直接完全覆盖本地修改
git reset --hard
git pull
git checkout 你想要切换的新的分支
******************** git强制更新已经更改的东西 end **************************
******************** git比价不同分支之间差异 begin **************************
经常要比较分支之间的差异
比较分支文件
git diff master func --stat 显示出所有有差异的文件列表
git diff master func – 文件名(含路径) 显示指定文件的详细差异,在maser下可以省略成”git diff func – 文件名“。注意路径前需要前后带空格的双分隔号–间隔
git diff master func 显示出所有有差异的文件的详细差异
******************** git比价不同分支之间差异 end **************************
******************** git 获取另一个分支的某个文件 begin**************************
拉取【另外一个分支】的某个文件到【目标分支】
1,切换到目标分支
2,输入命令:git checkout --patch 来源分支 文件路径(比如app/view/activity.java)
例子:git checkout --patch dev/MuDaDa_add_tianma_story_general_api common/ReadWriteExcel.py
******************** git 获取另一个分支的某个文件 end **************************
******************** git 删除 begin **************************
$ git rm test.txt
******************** git 删除 end **************************
******************** git 取消add ,取消暂存 begin ********************
$ git restore --staged 文件名
******************** git 取消add ,取消暂存 end ********************
******************** git 取消commit begin ********************
1、git log
id1 为需要撤销的 commit_id , 找到想要撤销的 git commit 的 id1
id2 为为需要撤销的 commit_id (id1)之前的一个的commit_id
2、git reset --hard id1
3、git reset id2
******************** git 取消commit end ********************
******************** git取消对某个文件的track跟踪 begin ********************
git rm --cached somefile
git commit -m “remove somefile added by mistake”
如果是目录在rm 后面加上 -r
******************** git 取消add ,取消暂存 emd ********************
******************** git 撤销文件的修改 begin ********************
$ git checkout – 文件名
情况1:在工作区已修改,但并未提交到暂存区(即并没有add)
撤销单个文件修改,使用下面命令:
$ git checkout – 文件名
若想撤销工作区中所有文件的修改,则
$ git checkout .
******************** git 撤销文件的修改 end ********************
******************** git 查看文件修改历史 begin ********************
$git log
$git diff 0365080276ae606ba6182f5a2ece41ecc453d179 SspRequests/sspGrpc/adtestAdSearch.py
******************** git 查看文件修改历史 end ********************
******************** git 切换分支的操作 begin ********************
与上一个分支来回切换
$git checkout -
******************** git 切换分支的操作 end ********************