学习资源
github开源工程 learnGitBranching,其网站在
1. fork
fork 的作用
fork 别人的库other’s/A,会在自己的space 派生出自己的库my/A,可以继续跟踪别人的库,同时自己可以修改并提交到my/A
fork后如何与源保持更新
首先,clone 自己的库 到自己的本地。
git clone URL(my/A)
然后,给本地库添加源(别人的库)
git remote add upstream URL
upstream:(随便起的名字)
URL: (other’s/A)
然后利用fetch和merge合并upstream的master分支:
git fetch upstream
git merge upstream/master
master: 分支名称,也可以是别的名字。
此时本地的master分支就更新至upstream的master版本。然后利用push将本地分支覆盖到git远程分支上:
git push origin master
origin :这是my/A在本地的别名,默认的,可以修改。other’s/A的别名就是前几步的upstream。
这就完成fork后保持对源项目的更新。
2. rename
git remote rename origin user
origin : 已有远程库在本地的名字
user:新名字
仓库地址
显示当前仓库地址
git remote show // 显示所有远程库源
git remote show origin // 显示远程库origin的URL
设置新的仓库地址
执行修改地址命令
git remote set-url origin URL // 将 origin 指向新的URL
3. 合并多个commit,只保留一个记录
应用场景:在分布式开发时,通常会有个人库和总库,个人平时的开发只提交到个人库,待功能开发完后再提交到总库。这时候把个人库的每次提交记录都送到总库是不必要的。这就需要先将个人的commit记录合并,然后再向总库合并。
rebase命令
举例转述:
例如你有ABCD四个记录,A是从总库分离时候的节点,BCD是个人库独有的记录,那么就需要把BCD合并成一个记录。
步骤:
- rebase 到 A
git rebase -i commit_id(这里应该是A的版本号)
- git rebase命令会要求你编写rebase 执行过程
pick 1e894df B’s commit log
squash 13fd690 C’s commit log
squash 6523dab D’s commit log
这里有pick ,squash 两个命令。pick表示使用此commit,squash表示将这个commit合并到前一个。
还有其他命令,可以删除commit等等。
保存后,rebase将从上到下执行rebase 设置。
-
编写 log
rebase完成后编写log,git 会把 BCD 的 log 都列出来供参考。 -
保存后即完成
个人库merge到总库
当个人库提交后,总库也有提交时
git reset --hard trunk/hli_lib
git cherry-pick commit_id(个人库的提交)
git push -f
git fetch
remote branch update
git fetch --prune <remote name>
更新远端分支状态,包括删除、新建的分支。
换行符
因为windows,Linux换行符不同,会对git提交和检查造成困扰。
解决办法:可以不检查换行符,提交时转换为
常用命令
commit相关
对已经提交的commit做修改,步骤如下:
git rebase -i commit_id~1
- 修改rebase规则:用
pick
把commit_id 放在最后一行,保存 - 修改code,
git add .
,git commit --amend
即可。
查看log的几种方法
git log -n
查看最近n条commit
git log --grep=<key>
查看关键字为key的commit,关键字即log中[]包括的。
查看分支
git branch -vv
查看本地分支和对应的remote branch
git branch -a
显示本地和远程所有分支
git fetch --prune
git rebase <remote name>/<remote branch>
git push
push 本地更新到远程对应的分支
git push <remote name> <local branch>:<remote branch>
push 本地更新到远程的其他(<remote branch>
)分支
git push -f
强制推送
stash
常用git stash命令:
(1)git stash save “save message” : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
(7)git stash drop stash@{KaTeX parse error: Expected 'EOF', got '}' at position 4: num}̲ :丢弃stash@{num}存储,从列表中删除这个存储
(8)git stash clear :删除所有缓存的stash
submodule
submodule dirty怎么办
重置:git submodule deinit
然后重新checkout: git submoudle init, git submodule update --init -r
untrack files
删除这些文件:git clean -f
删除文件夹:git clean -d -f