赞
踩
一、git常用命令
1.工程准备 git init [项目名称]
工程克隆 git clone [URL]
如果有大量二进制文件则使用 git lfs clone [URL]
克隆仓库,获取所有分支,并立即切换到指定的分支 git clone -b [分支名] [URL]
克隆仓库并仅获取一个分支 git clone -b [分支名] --single-branch [URL]
2.新增/删除/移动文件到暂存区 git add/git rm/git mv
新增所有未被管理的文件 git add .
3.查看工作区的修改内容 git diff [分支名] [分支名]
查看工作区文件状态 git status
4.提交更改的文件 git commit [文件名]
提交所有文件 git commit -am "添加描述"
修改描述信息 git commit --amend
撤销本次commit git reset --soft HEAD~1
5.查看日志 git log --name-status
查看最近几个节点的日志 git log -[数字]
6.推送远端仓库 git push origin [分支名]
7.列出本地分支 git branch
-r 查看远端的分支
-a 查看本地和远端所有的分支
新建分支 git branch 新建分支后不会切换到新分支
git checkout -b 新建分支后自动切换到新分支
删除分支 git branch -d [分支名] 不能删除当前分支,只能删除本地的其他分支
切换分支 git checkout [分支名]
更新分支 自动与本地分支进行合并 git pull origin [分支名]
不会影响本地分支内容 git fetch origin [分支名]
合并分支 从指定分支节点合并到当前分支 git merge [分支名]
用于以分支A为基线,合并到分支B git rebase [分支A] [分支B]
后者一般在MR上有冲突时使用
撤销合并 git rebase --abort
8.强制回退到历史节点 git reset --hard [commit_id]
commit_id通过log查看
git reset --hard HEAD 强制回退到头节点
回退本地所有修改而未提交的 git checkout .
只修改回退某个文件 git checkout -- [文件名]
回退工作区到某一个版本 git checkout [commit_id]
9.查看远端服务器名称 git remote
一般的服务器名称都是origin
10.查看操作记录 git reflog
11.设置默认的pull和push远端目录 git branch --set-upstream-to=origin/[分支名] [本地分支名]
12.将改动存储在本地,并将项目本次操作还原 git stash
使用上一次暂存,并将这个暂存删除,使用该命令后,如果有冲突,终端会显示,
如果有冲突需要先解决冲突(这就避免了冲突提交服务器,将冲突留在本地,然后解决)git stash pop
使用某个暂存,但是不会删除这个暂存 git stash apply
查看所有的暂存 git stash list
清空所有的暂存 git stash clear
删除某一个暂存,在中括号里面放置需要删除的暂存ID git stash drop [-q|--quiet] [<stash>]
如果暂存不小心清空,结果里面有需要的代码,
找出刚才删除的分支暂存里面的提交对象 git fsck --lost-found
然后使用 git show 命令查看是否正确,如果正确使用git merge命令找回
二、【Codehub】如何从主库同步代码到个人fork出来的派生库
例如:
Codehub用户:l00179216 (账号名)
fork项目地址:https://codehub-dg-g.huawei.com/l00179216/config.git
主库项目地址:https://codehub-dg-g.huawei.com/iSource/config.git
分支名:master
1.clone自己个人空间里的fork仓库到本地
$ git clone https://codehub-dg-g.huawei.com/l00179216/config.git
$ cd config
2.增加远程原始仓(主库仓)到本地(可以用 git remote -v 命令查看远程仓列表)
$ git remote -v
origin https://codehub-dg-g.huawei.com/l00179216/config.git (fetch)
origin https://codehub-dg-g.huawei.com/l00179216/config.git (push)
如果没有远程原始仓则需要增加:
$ git remote add wxz ssh://git@codehub-dg-y.huawei.com:2222/w30016506/HiTLS.git
git remote add wxz ssh://git@codehub-dg-y.huawei.com:2222/w30016506/HiTLS_Demo.git
git remote add wxz ssh://git@codehub-dg-y.huawei.com:2222/w30016506/secpits-protocol.git
git remote add wxz ssh://git@szv-y.codehub.huawei.com:2222/w30016506/NCTL.git
git remote add wxz ssh://git@szv-y.codehub.huawei.com:2222/w30016506/YED.git
git remote add wxz ssh://git@szv-y.codehub.huawei.com:2222/w30016506/NCTL_moddef.git
git remote add wxz ssh://git@szv-y.codehub.huawei.com:2222/w30016506/LiteOS_Test.git
git remote add wxz ssh://git@codehub-dg-y.huawei.com:2222/w30016506/HISTACK_NCTL.git
git remote add wxz ssh://git@codehub-dg-y.huawei.com:2222/w30016506/NCTL_test.git
git remote add lb ssh://git@codehub-dg-y.huawei.com:2222/l00658273/NCTL.git
git remote add wxz ssh://git@codehub-dg-y.huawei.com:2222/w30016506/NRTP.git
git remote add hitls ssh://git@codehub-dg-y.huawei.com:2222/VPP/HiTLS.git
git remote add wxz ssh://git@szv-y.codehub.huawei.com:2222/w30016506/NCTL_CYC.git
查看确认远程仓列表:
$ git remote -v
origin https://codehub-dg-g.huawei.com/l00179216/config.git (fetch)
origin https://codehub-dg-g.huawei.com/l00179216/config.git (push)
main https://codehub-dg-g.huawei.com/iSource/config.git (fetch)
main https://codehub-dg-g.huawei.com/iSource/config.git (push)
3.获取原始仓(主库仓)的branch分支最新代码到本地,合并两个版本的代码
$ git pull main master
4.把合并后的最新代码同步到iSource自己个人空间里的fork仓上
$ git push origin master
5.删除远程仓库
$ git remote rm wxz
三、解决冲突
方法1:
回到修改代码之前:git reset --soft HEAD~1
保存修改的代码:git stash
拉下主干的代码:git pull origin master
弹出保存的代码,修改冲突:git stash pop
提交修改:git commit -am "feat: 当成第一次提交"
强制推送到远端:git push -f xxx xxx
方法2:
切换到master分支:git checkout master
更新代码:git pull
合并分支:git rebase master 个人分支
解决冲突,合并修改:git add xxx/xxx
继续合并分支:git rebase --continue
强制推送到远端:git push -f xxx xxx
四、推送远端分支的操作
如果需要合并主干代码,最好先回退当前版本,再拉主干代码,这样就不会有 Merge branch 'master' 这样的commit
操作流程如下:
1.保存当前修改:git stash
如果当前修改已commit,可以撤销本次commit:git reset --soft HEAD~1
然后在使用 git stash 保存当前修改
2.回退大量的commit,来使本地与主干保持一致:git reset --hard HEAD~30
3.拉取主干代码:git pull origin master
这样就不会有 Merge branch 'master' 的commit
4.然后将暂存里的修改放出: git stash pop
5.提交修改的文件:git commit -am ""
6.推送远端仓库:git push xxx [分支名]
五、git撤销本次操作
1.使用git reflog 查看近期的操作记录
2.使用git reset --hard [记录前面的数字] 回到该次操作
六、换行符
1.git 有个全局配置,在 %USERPROFILE%\.gitconfig 文件里面,可以指定如何处理文本文件的换行符
[core]
autocrlf = true
有三个可选值:
true
false
input
在 Windows 系统上:
true 表示在推送时转成 \n,在拉取时转成 \r\n。这样的设置让 Windows 的开发者能兼容很多的开发工具(比如早期的记事本,新的已经支持 \r\n 了),不至于遇到很多换行符问题。
false 表示在推送时和拉取时都原样保留换行符。这样的设置在所有程序员都在同一个平台开发时很有用,git 完全不处理换行符,全部改由开发者自行解决。
input 表示在推送时转成 \n,在拉取时原样保留换行符。注意到,这样的设置会让仓库里所有的换行符都变成 \n 不再有什么时候有 \r\n 了,所以对 Windows 平台的开发者并不友好。
2.命令:
git config --global core.autocrlf true
git config --global core.autocrlf input
git config --global core.autocrlf false
3.如果已经产生了\r\n,merge时产生问题,可以设置:
git config merge.renormalize true // merge时忽略行尾对比
如果只需要执行一次merge可以是用命令:
git merge -s recursive -X ignore-space-at-eol origin/master
4.可以设置crlf安全检查
git config –-global core.safecrlf true // 禁止提交混合\n和\r\n的文件
git config –-global core.safecrlf false // 允许提交
git config –-global core.safecrlf warn // 提交时产生警告
七、tag
1.查看所有tag
git tag
2.给本地仓库分支打轻量级tag标签,括号内可选
git tag [tagName] (-m "tag info")
3.查看标签信息
git show [tagName]
4.推送单个tag到远端服务器
git push origin [tagname]
5.推送所有tag到远端服务器
git push --tags
或者 git push origin --tags
6.从当前tag拉分支
(1) 切换到具体tag
git checkout [tagName]
(2) 从tag拉取新分支
git branch [newBranchName] [tagName]
(3) 从tag拉取新分支
git checkout -b [newBranchName] [tagName]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。