-
git配置 git config --gloabal --list
-
git pull = git fetch + git merge -b
-
移除本地工作区文件 git rm -r --cached xxx
-
由于其分布式特性?代码会存在三个地方?工作区--- git add ./git add -u? --- 暂存区 --- commit -m --- 仓库 --- git push --- master
-
push了一个版本要修改:?先修改本地,然后 git commit -amend?amend改良,修订之意 再push
-
git?pull时报error:"your local changes to the following files would be override by merge", git stash stach?是贮藏之意, git pull, git stash pop?解决冲突
-
不会有新的
-
多用 git status, git log, git log --oneline?本地提交历史?
-
HEAD?指向当前分支(当前版本更准确) 最新commit git中的分支只是一个引用,删除分支并不会删除commit,没有合并到master的分支是不能删除的?
HEAD?
really just means "what is my repo currently pointing at".
master?git创建一个仓库时的
默认分支,主分支,叫啥都行
origin?原始
仓库
(一般是远程仓库),git给你的主远程仓库起的
默认名字
-
git?为什么要设置暂存区?
git为什么要设置暂存区? - 知乎?git add .后,而后commit前后悔了, 此时不想push一些文件到远程,git rm --cached
-
关键词?面向修改?把修改推送给对方!
-
git?
rebase把自己的代码给覆盖了? git reflog?找到rebase之前的点,git reset就又回来了
-
branch相关的几个问题:
新建分支并指向上游分支?git branch new_branch remote_branch,?记住这不会切换分支,必须switch
不如使用 git checkout -b branch new_branch
git branch -u (注意使用这个命令时已经切换到相应的分支)
git push -u都可以设置上游分支
上游分支和是否远程分支没有关系
查看本地分支的上游分支: git branch -vv
-
git push origin HEAD:refs/for/xxx
是指
在origin远程仓库,将当前的版本(HEAD)提交到前面指定的仓库的某个分支refs/for/xxx
-
创建远程分支
切换到基分支,然后git branch new_branch(注意在此之后要checkout,要么就 git checkout -b new_branch)
最后 git push origin HEAD:remotes_branch_name
-
回退本地commit?
git log grahp?查看找出远程commit_id
git reset commit_id,可以看到后来的变化,剔除变化,然后commit即可
git revert commit_id也能回退,不同的是新建一个提交
-
git
合并分支,?要将a合并到master,则先checkout到master,再git?merge wanted_merged_branch,解决冲突后commit
-
近日又搞到两个命令: git switch?应该用switch来切换分支的,
?如果没有IDE,怎么rollback
回退文件呢?git restore?file?或者?git?checkout --?file
目前在分支A上,想
单独拉下分支B上的文件 git chckout B -- file?正是我最近想要的,来比对使两个分支同步
问题又来了,这个里面的 -- (double?dash)是干什么用的??用来
消除歧义的,比如checkout?one?如果one是branch?则为?切换分支,如果one是一个目录则是rollback了,分不清了,所以只有一个--时则特指文件
SOF?其实不止Git,?这是POSIX标准,命令行中也用这个来转义
-
git merge?是对两个分支共同节点之后分离的节点合并起来,所以merge点会有两个parent,合并分支A后,如果在主分支上删除A的变动,再次合并A,A上的变动将不会合并进去,因为共同点已经没有分离了
回退merge应该使用revert而不是本地reset后再次提交,远程commit记录不会变化的
过程描述:分支A开发完成,误在分支A上拉了bugfix分支,将bugfix合并进master,发现问题(大量变动知道基分支错误了),回退master,删除(D文件)分支A变动,20天后再次merge分支A,并未合并进去
-
所有的commit都已经推到Girret评审后,切换分支git?merge后,推到Gerrit提示没有变动发生,拒绝发起review,在merge时应该操作: git?merge --no-ff, 或者直接push到master(不建议) "after git merge, the push to Gerrit fails, indicating no new change"?我是通过修改changeId欺骗Gerrit,然而我后面再如此操作,普通merge后却能继续push生成个review,为啥呢?
-
拉错分支时如何修改?变基? 这时候就是rebase的魅力了?或者cherry-pick?这个东西居然可以pick一段??git cherry-pick A B C? git cherry-pick A..B (A,B]?
阮一峰的博客
怎么知道自己基于哪个分支?
git log --first-parent
git log --graph --decorate --simplify-by-decoration
或者,呃,更大的?
git show-branch | sed "s/].*//" | grep "\*" | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -n1 | sed "s/^.*\[//"
-
修改曾经的commit: git rebase -i HEAD~n 找到要修改的commit,编辑为edit,?修改代码, git commit --amend?最后?git rebase --continue?
CSDN
-
特性分支落后了:?特性分支基于rel分支拉取,但是rel分支前进了,于是就可以 git rebase rel?变基,
与git文档一致 摘录网络评论:
本地开发分支拉取远程开发分支用rebase,开发分支合并主干分支的时候用rebase,最后主干分支合并开发分支用merge,最后推送各分支
-
gerrit?push发起review时报错
squash commits first
,?它的意思是让你先合并提交,?原因是commit中有重复的changeId,git log?找出重复的changeId并修改即可;触发原因是先后cherry-pick了其他分支上对一个commit的两次修改:分支A?commitA-->分支B cherry-pick commitA -->?分支A修改commitA -->?分支B cherry-pick commitA?
gerrit文档
-
回到以前的状态 git log --oneline?查看要回到的commit?然后? git checkout commit_id?然后可以看代码,?要回去 git switch -?是不是像cd -
-
比较?现在比较时很依赖IDE,git diff branchA branchB? 或者直接 git diff branchB 只对比文件名?加 --name-only?
也可以比较两个commit git diff commit_id1 commit_id2?
比较branch2?与 branch1、branch2的公共祖先之间的差别 git diff branch1 ... branch2
baeldung.com
-
去掉merge中的
commit记录??git rebase --soft commit-id ; git commit ;? 为什么会产生这个需求呢??分支1上落后太多,n个月后需要合到分支2上,在分支2上merge?分支1,解决冲突后,达到了理想状态,但是这个代码push不上去,因为分支1上的历史提交里还会产生冲突,于是回头到分支1上rebase合并成一个提交,回到分支2上再merge,但是git?log查看过去的提交历史还在;于是就有了这种需求,时间过于久远,分支1上具体的commit记录已经没有意义??
git remove merge commit from history - Stack Overflow