Git 常用命令
init : 初始化Git仓库
git init : 进入文件夹中把这个目录变成Git可以管理的仓库
git status:查看工作区状态
git diff HEAD --[file] : 查看工作区和版本库里面最新版本的区别
add : 添加文件到暂存区
git add . : 添加所有文件
git add 【file】 :添加某个文件
git add【file1】【file2】:添加多个文件
commit :提交暂存文件到本地仓库
git commit -m “xxx” :带备注信息
git log :查看提交详细历史,可以确定要回退到哪个版本
git log --pretty=oneline :省略输出相关信息,查看当前分支最近的提交
git log --pretty=oneline --addrev-commit : 省略部分commit id
git log --graph : 查看分支合并图
git log --graph --pretty=oneline --abbrev-commit
git reflog :查看历史命令列表
reset:
git reset --hard HEAD^ :回退到上一个版本,并撤回修改
git reset —hard [commit id(前7位)] : 跳到指定版本,之前或未来
git reset —soft [commit id] :撤销提交,不会撤销代码修改
fetch :
git fetch : 将远程主机的最新内容拉到本地,用户在检查以后再决定是否合并到工作本机分支中
git pull :将远程主机的最新内容拉下来后直接合并:即:
git pull = git fetch + git merge
git fetch <远程主机名> :将某个远程主机的更新全部取回本地
git fetch <远程主机名> <分支名>:只取回特定分支的更新
eg:取回origin 主机的master 分支:git fetch origin master
取回更新后,会返回一个FETCH_HEAD,指的是某个branch在服务器上的最新状态,可以在本地通过它查看刚取回的更新信息:git log -p FETCH_HEAD,可以看到更新的文件名,更新的作者和时间,以及更新的代码,可以通过这些信息来判断是否产生冲突,以确定是否将更新merge 到当前分支
pull : 拉取远程仓库所有分支的更新并合并到本地
git pull <远程仓库master> <远程分支> : <master的本地分支 >: 将远程仓库master 的分支的更新拉取到本地,与本地master 分支合并
push :推送本地仓库所有分支更新到远程仓库
git push origin master : 将本地分支推送到远程主分支
git push -u origin master :将本地主分支推送到远程master分支,如没有则创建并初始化远程仓库,还会把本地的master分支和远程的master分支关联起来。 简化命令:git push
git push origin <local_branch> #创建远程分支,origin是远程仓库名
git push origin <local_branch>:<remote_branch> # 创建远程分支
git push origin :<remote_branch> #先删除本地分支,然后删除远程分支
remote : 查看关联的远程仓库信息
git remote add [远程仓库地址] : 添加新的远程仓库的地址/本地仓库关联远程仓库
git remote : 显示全部关联的远程仓库的名称
git remote - v : 显示全部关联的远程仓库的详细信息
git remote rename name1 name2 : 重命名
git remote rm name : 删除远程仓库的关联
git remote show origin :查看指定关联的远程仓库的全部信息
branch:
git branch branch_name:创建分支
git branch:查看本地所有分支
git branch -r :查看远程所有分支
git branch -a:查看本地和远程的所有分支
git branch -v:查看最新提交的信息
git branch_name:查看具体分支
git branch -d branch_name:删除本地分支
git branch -d -r branch_name git push origin:<branchname>:删除远程分支,删除后还需推送至服务器
git branch -D <name>:强制删除未合并分支
git branch -m <oldbranch> <newbranch>:重命名本地分支
checkout : 切换分支
git checkout branch_name : 切换到具体分支
创建并切换:git checkout -b branch_name :相当于以下两条命令:
git branch [分支名] git checkout [分支名]
git checkout --[file] : 把文件在工作区的修改全部撤销
rm [file] :文件管理区中把没有用的文件删除
git rm [file] :从版本库中删除文件
git checkout -- [file] :如果删除错了,因为版本库里还有,所有可以把误删除的文件恢复到最新版本
rebase :调整commit信息,包括合并commit信息到master以及删除commit信息或者修改log信息等。当合并的时候,它是线性合并;使用交互模式编辑commit的信息。
**合并commit信息到master**
例如有如下commit信息并且当前处于topic分支:
A---B---C topic
/
D---E---F---G master
当我们执行:git rebase master 命令后,commit信息将会变为:
A'--B'--C' topic
/
D---E---F---G master
如果我们执行:git rebase topic master,则commit信息会变为:
A'--B'--C' topic
/
D---E---A'---B'---C'---F---G master
上面两种情况相当于把commit信息合并到一起,而且是线性合并,这就是与merge不同的地方,如果使用git merge进行合并,则结果为:
A---B---C topic
/ \
D---E---F---G ---H master
多数情况下,当执行git rebase时,会出现conflict,此时,我们需要手动处理冲突,然后执行git add 把修改后的文件添加到暂存区,最后,如果想完成rebase,则执行git rebase –continue,如果不想,则执行git rebase –abort
**使用交互模式编辑commit信息**
使用git rebase -i 交互模式,你可以编辑commit信息,包括改变commit的顺序、删除某些commit、修改log信息等。使用方法为:git rebase -i ,例如:
执行git rebase -i HEAD~4,编辑器将会自动打开,显示最新的4个commit信息,以及一些操作命令,效果如下:
pick 9a54fd4 添加commit的说明
pick 0d4a808 添加pull的说明
pick d286baa The oneline of this commit
pick f1a5c00 The oneline of the next commit
# Rebase 326fc9f..0d4a808 onto d286baa
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
这些命令都很容易理解,比如你想修改0d4a808 commit的log信息,则把第二行的pick改为reword即可,然后保存退出,此时会再次打开一个编辑器,让你修改0d4a808 commit的log信息,修改后保存即可。
如果你想在0d4a808 和 d286baa 两个commit之间补上一个新的commit,可以使用edit替换第二行的pick然后保存,按照提示用git commit –amend添加一个新的commit,然后执行git rebase –continue即可。
如果你想删除9a54fd4和d286baa,则直接删了9a54fd4,并且把d286baa前面的命令改为fixup,意思就是删除本条commit。注意,不能直接把d286baa的记录删除,因为只有在前面没有commit的情况下才可以直接删除,效果如下:
(这里删除了 pick 9a54fd4 添加commit的说明)
pick 0d4a808 添加pull的说明
fixup d286baa The oneline of this commit
pick f1a5c00 The oneline of the next commit
原文链接:https://blog.csdn.net/fangjian1204/article/details/51017266
merge : 合并分支
git merge branch_name : 把分支的工作成果合并到master 分支上
cherry-pick :将其他分支上的commit 修改,移植到当前的分支:比如想在某个稳定版本上,添加一个刚开发完成的版本中的功能。就可以使用该命令,将这个功能相关的commit提取出来,合入稳定版本的分支上。
git cherry-pick <commit-id> : 可以通过git管理工具或者git log 命令查找需要的commit-id。当执行完后,会自动生成一个新的commit 进行提交,会有一个新的commit ID。
git cherry-pick -x <commit-id> :保留原提交的作者信息进行提交。
git cherry-pick <start-commit-id>…<end-commit-id> :支持批量的cherry-pick,可以一次将一个连续的时间序列内的commit,(左开,右闭]的区间。如果想要包含start-commit-id,用^ 标记一下,就变成[左闭,右闭]的区间:git cherry-pick <start-commit-id>^…<end-commit-id>
注意 git 命令中,对于 commit-id 的操作,都只需要使用前五位就可以了。
git cherry-pick 371c2…971209 // (2,5]
git cherry-pick 371c2^…971209 // [2,5]
git clone [github仓库地址:如远程仓库HTTPS/SSH地址]:从远程仓库克隆到本地普通文件夹中
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "your note" [branch name]
假设Git目前只有一个分支master。开发人员的工作流程是
git clone master branch
在自己本地checkout -b local创建一个本地开发分支
在本地的开发分支上开发和测试
阶段性开发完成后(包含功能代码和单元测试),可以准备提交代码
本地开发分支可以灵活管理
git checkout master
git pull
git checkout local
git rebase -i HEAD~2 //合并提交 --- 2表示合并两个
git rebase master---->解决冲突--->git rebase --continue
git checkout master
git merge local
git push
原文链接:https://blog.csdn.net/nrsc272420199/article/details/85555911