You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
shannonchensmbp:Playground ShannonChen$ git pull
error: The following untracked working tree files would be overwritten by merge:
ImageResizingExample/.DS_Store
Please move or remove them before you can merge.
Aborting
rebase in progress; onto 9c168a5
You are currently rebasing branch 'master' on '9c168a5'.
(all conflicts fixed: run "git rebase --continue")
nothing to commit, working directory clean
$ git status foo/bar.txt
# On branch master
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# deleted by us: foo/bar.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
执行 checkout 之后报错:
$ git checkout HEAD foo/bar.txt
error: path 'foo/bar.txt' is unmerged
$ git reset HEAD foo/bar.txt
Unstaged changes after reset:
M foo/bar.txt
Activity
[-]【专题】版本控制[/-][+]【专题】版本控制:Git 和 SVN[/+]ShannonChenCHN commentedon Apr 27, 2017
使用 Git 时的常见问题
1.
git add
之后用git reset --hard
撤销了,但是没有 commit 过,如何恢复之前 add 过的修改?(1) 执行
find .git/objects -type f | xargs ls -lt | sed 60q
,查看最近 60 次的 add 记录;(2) 使用
git cat-file -p ID > output_file_name.m
,将 ID 所示的文件读取出来重定向保存到 output_file_name.m 文件内,ID 是 objects 后面的一串东西,比如保存记录的目录是.git/objects/6b/3fe19b5cf5357d21a1f79ffb2c81ac7b6d81b1
,那么 ID 就是6b3fe19b5cf5357d21a1f79ffb2c81ac7b6d81b1
。(需要去掉 “/”)。建议:
- 不要随便使用
git reset --hard
命令;- 多使用
git add
命令,没有使用过git add
命令就撤销修改了的话,是无法回复修改内容的;- 提交时,按修改内容的相关性分别提交,不要一次性提交一大堆逻辑不相关的修改,保证一次只改一个逻辑或者功能。
参考:
- 恢复 git reset --hard 删除的文件
- Undo git reset --hard with uncommitted files in the staging area
2. How to undo 'git add' before commit?
git reset <file>
撤销添加某一个文件到暂存区的操作git reset
撤销上次添加文件到暂存区的操作延伸阅读
3.
git add -A
和git add .
以及git add -u
的区别git add -A
:把所有新建、修改、删除的记录修改添加到暂存区git add .
:把所有新建、修改的记录修改添加到暂存区,不包括删除的文件git add -u
:把所有修改、删除的记录修改添加到暂存区,不包括新建的文件参考:
4.如何撤销 最近一次的
git commit
操作?参考:
5. 执行
git pull
命令时,报错:解决办法:执行
git clean -d -fx ""
命令,删掉不需要的文件参考:The following untracked working tree files would be overwritten by checkout
6. 如何查看指定 commit 提交的修改内容?
git show <commit id>
7. 生成 SSH 公钥
三步:
参考:
8. 如何为不同 Git 仓库所对应的不同用户设置不同的 SSH 授权信息
比如,在你的电脑上,有一个个人的 Github 仓库,另外还有一个公司的 Git 仓库,这两个仓库对应不同的用户信息,所以需要生成不同的 SSH key。
参考:
9. git stash 的用法
10. 如何删掉本地的 untracked 文件?
Step1:先查看要删除的文件:
Step2:然后再删除文件:
参考:
11.
git fetch origin --prune
命令--prune
选项表示在 fetch 的时候,从本地仓库中删除远程已经删除的分支。参考:
12. 执行
git pull --rebase
时报错:解决办法:
先 abort,(如果有冲突就解决冲突)然后再重新执行 rebase 操作。
参考:
[-]【专题】版本控制:Git 和 SVN[/-][+]版本控制:Git 和 SVN[/+]ShannonChenCHN commentedon Jul 5, 2017
SVN 工作流
1. tags,branches,trunk 是什么?
tags,branches,trunk 在 SVN 代码仓库中并没有什么实际意义,仅仅是大家常用的一种惯例。
2. tags,branches,trunk 分别是用来干什么的?
参考:
ShannonChenCHN commentedon Aug 17, 2017
SVN 命令
ShannonChenCHN commentedon Aug 17, 2017
【Git】Git 工作流
ShannonChenCHN commentedon Sep 22, 2017
【Git】.ignore 文件
ShannonChenCHN commentedon Sep 29, 2017
【SVN】SVN 常见问题
1. 代码回滚
1.1 修改的代码还没有 commit 过
执行 revert 操作就可以了
1.2 修改的代码已经 commit 过了
方式一:SmartSVN
在 SmartSVN 菜单上选择 log,然后选择指定的 revision,再使执行 rollback 操作,本地就能会回滚到指定的提交记录版本上了,最后还需要通过 commit 同步到服务器上。
方式二:命令行
① 更新到最新的代码
假定我们最新的提交记录是 revision 100
② 确定要回滚的版本号 revision, 查看提交记录:
假设需要回滚到 revision 98,如果需要查看提交记录的详细内容,还可以使用命令
svn diff -r 100:98
③ 回滚到版本号 98
为了保险起见,再次确认回滚的结果:
④ 提交回滚的操作:
参考:
2. 合并分支
跟 git 上的 merge 操作类似,svn 也有 merge 操作,直接将一个 branch 合并到 trunk 上就行了,或者将 trunk 合并到一个 branch 上,如果出现冲突(conflict),解决冲突就行了。
ShannonChenCHN commentedon Jun 19, 2018
【Git】场景:如何为不同 Git 仓库所对应的不同用户设置不同的 SSH 授权信息
背景
比如,在你的电脑上,有一个个人的 Github 仓库,另外还有一个公司的 Git 仓库,这两个仓库对应不同的用户信息,所以需要生成不同的 SSH key。
分析
当你有两个不同的 Git 仓库而且对应不同的用户信息时,就会出现第二个仓库的 SSH key 覆盖掉第一个仓库的 SSH key。
解决办法
~/.ssh
目录下创建一个名字叫做config
的普通文本文件(如果已经有了的话,直接打开编辑就行了),并在其中填好各个账户信息。格式如下:其他问题
如果之前有设置全局用户名和邮箱的话,需要先重置一下全局的用户信息,然后再在不同的仓库下分别设置各自的用户名和邮箱。
查看 config 信息
查看系统config:
查看当前用户(global)配置:
查看当前仓库配置信息:
延伸
参考:
ShannonChenCHN commentedon Jun 25, 2018
【Git】Gerrit 工作流程
Gerrit 实际上是一个 Git 服务器,它为在其服务器上托管的 Git 仓库提供一系列权限控制,以及一个用来做Code Review 的 Web 前台页面。当然,其主要功能就是用来做Code Review。
Gerrit 的工作流程:
使用过git的同学,都知道,当我们git add --> git commit --> git push 之后,你的代码会被直接提交到repo,也就是代码仓库中,就是图中橘红色箭头指示的那样。
那么gerrit就是上图中的那只鸟,普通成员的代码是被先push到gerrit服务器上,然后由代码审核人员,就是左上角的integrator在web页面进行代码的审核(review),可以单人审核,也可以邀请其他成员一同审核,当代码审核通过(approve)之后,这次代码才会被提交(submit)到代码仓库(repo)中去。
无论有新的代码提交待审核,代码审核通过或被拒绝,代码提交者(Contributor)和所有的相关代码审核人员(Integrator)都会收到邮件提醒。
gerrit还有自动测试的功能,和主线有冲突或者测试不通过的代码,是会被直接拒绝掉的,这个功能似乎就是右下角那个老头(Jenkins)的任务。
整个流程就是这样。
注意点
在使用过程中,有两点需要特别注意下:
提交者不能直接把代码推到远程的master主线(或者其他远程分支)上去。这样就相当于越过了gerrit了。 gerrit必须依赖于一个refs/for/*的分支。
refs/for/master
分支时(使用git push origin HEAD:refs/for/master
而不是git push origin master
),gerrit才会知道,我收到了一个需要审核的代码推送,需要通知审核员来审核代码了。当审核通过之后,gerrit会自动将这条分支合并到master主线上,然后邮件通知相关成员,master分支有更新,需要的成员再去pull就好了。为什么要使用 change-id
保证已经提交审核的修订通过审核入库后,被别的分支 cherry-pick 后再推送至服务器时不会产生新的重复的评审任务。Gerrit 设计了一套方法,即要求每个提交包含唯一的 Change-Id,这个 Change-Id 因为出现在日志中,当执行 cherry-pick 时也会保持,Gerrit 一旦发现新的提交包含了已经处理过的 Change-Id ,就不再为该修订创建新的评审任务和 task-id,而直接将提交入库。
解决“ERROR:missing Change-Id in commit message”
see Gerrit error when Change-Id in commit messages are missing.
参考
refs/for
namespaceShannonChenCHN commentedon Jun 25, 2018
【Git】How to change committer email address during git push
问题
在 push 时出现邮箱不正确的提示,如何修改之前已经提交 commit 的用户信息?
解决办法
参考
ShannonChenCHN commentedon Jun 25, 2018
【Git】合并代码后,出现冲突,如何撤销冲突文件的本地修改?
问题
执行 checkout 之后报错:
解决方法
参考
2 remaining items