git hub/git lab 合作
有关协作,原来了解的比较少,其实向tensorflow上提交代码就是用的github, 明确github是个网站。
有几个关键点要注意:
1. 从原项目中fork一个项目到自己的账号,也是个remote 项目
2. git clone 从自己的项目
3. 本地的repo要关联自己项目的仓,git clone时会自动创建clone的origin remote branch
4. 因为代码最终是要合成得到原项目,所以需要添加一个remote repo xxx和local repo关联
5. local repo要和xxx的代码同步,因为最终代码要提交到xxx
6. local repo在工作区完成修改、提交到本地等
7. git push branch yyy到remote origin
git push -f origin feature/clang-format(不加-f 可能报错:使用-f的前提是保证原始项目的git log和要提交的一直(除了第一条[要提交的修改])) [从git lab网站上看commits], 否则最后merge request 失败
8. 此时在自己fork出的git hub上就能看到提交,然后可以发起pull request
9. 在网页进行交流、rebase 等等
10. 没问题 , 合入到主干
怎样从一个 remote仓更新代码:
➜ python git:(track_submit) ✗ git pull submit_master
You asked to pull from the remote 'submit_master', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
➜ python git:(track_submit) ✗ git pull submit_master master
From git.n.xiaomi.com:deep-computing/sensor-algorithms
* branch master -> FETCH_HEAD
git clone后怎样更新代码
12780 git remote -vv
12781 git remote add git@git.n.xiaomi.com:deep-computing/watchsensorrecord.git
12782 git remote add upstream git@git.n.xiaomi.com:deep-computing/watchsensorrecord.git
12783 git remote -vv
12784 git fetch upstream
12788 git rebase -i upstream/master
多个分支间的关系
对应的.git/config文件
1 [core]
2 repositoryformatversion = 0
3 filemode = true
4 bare = false
5 logallrefupdates = true
6 [remote "origin"] clone后的
7 url = git@git.n.xxx.com:xxx/xxx.git
8 fetch = +refs/heads/*:refs/remotes/origin/*
9 [branch "master"]
10 remote = origin
11 merge = refs/heads/master
12 rebase = true
16 [remote "upstream"] 上游被clone的分支
17 url = git@git.n.xxx.com:xxx.git
18 fetch = +refs/heads/*:refs/remotes/upstream/*
使用命令添加remote分支
git remote add upstream git@git.n.xxx.com:xxx.git
也可直接编辑config文件
各分支间关系
1. origin 从upstream中clone, origin 向upsteam 发起 merge request
2. checkout 到master分支 git fetch --all, git rebase -i git rebase -i upstream/master 得到upstream最新代码
3. git push -f origin master ;push代码到 clone得到的分支origin
4. 创建分支 git checkout -b xxx, git add, commit -s, 后
5. git push -f origin(target) xxx(source 待提交分支)
6. 提交merge request
Git remote操作
git stash
git submodule
- 进入git clone之后的目录下输入:
git submodule update --init --recursive
git 查看修改
git show commitID 得到是
git 查看最近或某一次提交修改的文件列表相关命令整理。
git log --name-status 每次修改的文件列表, 显示状态
git log --name-only 每次修改的文件列表
git log --stat 每次修改的文件列表, 及文件修改的统计
git whatchanged 每次修改的文件列表
git whatchanged --stat 每次修改的文件列表, 及文件修改的统计
git show 显示最后一次的文件改变的具体内容
git show -5 显示最后 5 次的文件改变的具体内容
git show commitid 显示某个 commitid 改变的具体内容
遇到的问题:代码已经merge到基线,当git fetch, git rebase 都看不到更新
git fetch
并不会改变你本地仓库的状态。它不会更新你的 main
分支,也不会修改你磁盘上的文件。
理解这一点很重要,因为许多开发人员误以为执行了 git fetch
以后,他们本地仓库就与远程仓库同步了。它可能已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件。
所以, 你可以将 git fetch
的理解为单纯的下载操作
参考
标签 | 猴子都能懂的GIT入门 | 贝格乐(Backlog) "猴子都能看懂的GIT入门"