总体流程命令
1、从网上下载到本地库:
克隆时自动将创建好的master分支追踪origin/master分支
# 找到下载地址
git clone [url]
# clone分支
git clone -b branchA http://admin@192.168.1.101:7070/r/virtualbox_all_versions.git
2、修改本地代码后,将文件添加到暂存区:
你在修改本地代码文件时,修改只会影响到工作区。当使用add添加新文件后也就意味着git开始追踪新文件。
add方法分析
# 添加指定文件到暂存区
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
git add [dir]
# 添加当前目录的所有文件到暂存区
#提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add .
#仅监控已经被add的文件(即tracked file),将被修改的文件提交到暂存区。
#提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add -u
#提交所有变化
git add -A
# 取消上一次add命令
git reset
# 删除工作区文件,并且将这次删除放入暂存区
git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区
git mv [file-original] [file-renamed]
3、提交到本地库:
# 提交暂存区到仓库区
git commit -m [message]
# 提交暂存区的指定文件到仓库区
git commit [file1] [file2] ... -m [message]
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend -m [message]
# 取消上次commit
git commit -m "Something terribly misguided" (1) 你commit了一次
git reset HEAD~ (2) 发现内容不对,取消
-》修改文件 (3) 修改一些文件
git add 文件 (4) 重新add
git commit -c ORIG_HEAD (5) 重新commit
#合并前3个commit
git rebase -i HEAD~3
4、提交到远程库或更新本地库:
git push <远程主机名> <本地分支名> :<远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,第一个master是本地分支名,第二个master是远程分支名。
# 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin master
# 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
git push origin :refs/for/master
# 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push origin
# 上传本地指定分支到远程仓库
git push [remote] [branch]
# 强行推送当前分支到远程仓库,即使有冲突
git push [origin] [branch] --force
git push [origin] [branch] -f
# 下载远程仓库的所有变动,并未merge
git fetch [remote]
# 取回远程仓库的变化,并与本地分支合并
git pull [remote] [branch]
其他命令
分支:
分支的理解
分支理解2
git拉取远程分支并创建本地分支
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 切换到指定分支,并更新工作区
git checkout [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 远程先开好分支然后拉到本地,并且让feature-branch分支追踪origin/feature-branch远程分支。
git checkout -b feature-branch origin/feature-branch
# 本地先开好分支然后推送到远程
git checkout -b feature-branch
git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
git branch -u origin/serverfix
设置当前分支跟踪远程分支origin/serverfix
git branch -vv
查看本地分支和远程分支的跟踪关系
git branch -d [branch-name]
删除分支
比较远程分支:
先更新下本地的远程分支
git fetch origin
然后可以比对
git diff 本地分支 origin/xxxx
状况查询:
# 显示有变更的文件
git status
# 显示当前分支的版本历史
git log
# 显示暂存区和工作区的差异
git diff
# 显示两分支的差异
git diff [first-branch] [second-branch]
# 比较特定文件
git diff master:bin/run_relevance.py hqk_bertimg:exps/bertrel/run_relevance.py
submodule
Git中submodule的使用
# 添加子模块,url为子模块的路径,path为子模块存储的目录路径。
git submodule add <url> <path>
第一次使用前,执行git submodule init和git submodule update --recursive 或者 git submodule update --init --recursive
需要更新时,使用命令:git submodule update --recursive
如果需要提交修改的第三方库,需要在第三方库目录下执行git和cr操作。
# 删除子模块 --force,则子模块工作区内即使有本地的修改,也会被移除。
git submodule deinit project-sub-1 .
git rm project-sub-1
merge request的流程
1、先在本地创建一个本地分支,比如叫xx_branch。
2、改动xx_branch下的代码。
3、进入你的项目根目录下,运行如下命令,将xx_branch推到远程分支。注意这一步只是新建了个远程分支。
git add .
git commit -a -m 'xxxxx'
git push origin xx_branch
4、在gitlab上面操作,进入xx项目下,点击merge request选项,
然后选择你之前推到远端的xx_branch和你要合并到哪个分支,比如你要合并到master上。
5、点击merge request。
合并远程分支到本地
[GIT] master、origin master 与 origin/master 有什么区别?
1.git fetch
git fetch origin master:tmp //将远程master分支复制到本地tmp分支上
git diff tmp //比较区别
git merge tmp //合并tmp分支
git branch -d tmp
2. git pull:
git pull origin master //相当于git fetch 和 git merge
//切换到master分支
git chekout master
//更新master分支
git pull
//切换到自己的分支aaa
git checkout aaa
//把master分支合并到自己分支
git merger master
为什么要使用git pull --rebase?
git pull origin master与git pull --rebase origin master的区别
// 使用rebase pull
git pull = git fetch + git merge FETCH_HEAD
git pull --rebase = git fetch + git rebase FETCH_HEAD
git pull --rebase origin master
恢复到某一commit
git reflog / git log
git reset b2e7806
git stash
reset --hard:重置stage区和工作目录
reset --soft:保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区
--hard 会清空工作目录和暂存区的改动,而 --soft则会保留工作目录的内容,并把因为保留工作目录内容所带来的新的文件差异放进暂存区。
reset 不加参数(mixed):保留工作目录,并清空暂存区