- 重新设置远程仓库
git remote 查看所有远程仓库
git remote xxx 查看指定远程仓库地址
git remote set-url origin 其他的url - error: Your local changes to the following files would be overwritten by merge:
git add *
git stash
git pull
git stash pop
需要从其他人的库里fetch代码 有选择的合并的时候
git fetch remotename remotebranch:tmp
git checkout master(切换到自己想要merge远程分支的本地分支)
git diff tmp
git merge tmp
git branch -d tmp
如果只是从自己的库里fetch 和 merge
git pull
fork别人的代码
git clone my_fork_link
git remote add upstream othergit_link
获取他人更新
git pull upstream <branch>
向他人提交 pull request
- 先提交到自己的fork的仓库:git push origin
branch
- 在github上创建pull request即可
- 远程覆盖本地代码
git fetch git reset --hard origin master
- git 撤销commit 但未push的代码
git log git reset --hard(如果想保留修改内容而不是强制覆盖,则不加--hard) commitID
- 撤销 为commit的修改
git status
返回的英文里面告诉你了用什么命令撤回
- rebase
git rebase -i HEAD~4 或者 git rebase -i commitID(如果我想把1,2,3合并,我的commitId要写3的下一个,即4)
git的创建分支: HEAD指向dev,并继续发展
git的分支合并: 把master指向了dev,HEAD指向了master也指向了dev
vpsmaster@ubuntu:~/git$ git checkout -b dev #创建并切换到dev
Switched to a new branch 'dev'
vpsmaster@ubuntu:~/git$ git branch #查看当前的branch
* dev
master
vpsmaster@ubuntu:~/git$ touch testbranch #在dev分支上创建一个文件
vpsmaster@ubuntu:~/git$ ll
total 16
drwxrwxr-x 3 vpsmaster vpsmaster 4096 Jun 14 00:03 ./
drwxr-xr-x 29 vpsmaster vpsmaster 4096 Jun 13 23:34 ../
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 13 23:00 file2
drwxrwxr-x 8 vpsmaster vpsmaster 4096 Jun 14 00:02 .git/
-rw-rw-r-- 1 vpsmaster vpsmaster 12 Jun 13 23:06 readme.txt
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 14 00:03 testbranch
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 13 23:13 testrm
vpsmaster@ubuntu:~/git$ git add testbranch
vpsmaster@ubuntu:~/git$ git commit -m "testbranch"
[dev a8a027e] testbranch
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testbranch
vpsmaster@ubuntu:~/git$
vpsmaster@ubuntu:~/git$ git checkout master #切换回master分支
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
vpsmaster@ubuntu:~/git$ git merge dev #把master分支合并
Updating 3b2e026..a8a027e
Fast-forward
testbranch | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testbranch
vpsmaster@ubuntu:~/git$ ll #master分支下也拥有了testbranch文件
total 16
drwxrwxr-x 3 vpsmaster vpsmaster 4096 Jun 14 00:06 ./
drwxr-xr-x 29 vpsmaster vpsmaster 4096 Jun 13 23:34 ../
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 13 23:00 file2
drwxrwxr-x 8 vpsmaster vpsmaster 4096 Jun 14 00:06 .git/
-rw-rw-r-- 1 vpsmaster vpsmaster 12 Jun 13 23:06 readme.txt
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 14 00:06 testbranch
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 13 23:13 testrm
vpsmaster@ubuntu:~/git$
创建分支dev2,修改了readme.txt 回到master,修改readme.txt git merge dev2 后产生如下冲突
vpsmaster@ubuntu:~/git$ git merge dev2
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
<<<<< HEAD
master
=======
dev2
>>>>> dev2
789
456
123
修改文件成如下就可以提交了
master dev2
789
456
123
git add readme.txt
git commit -m "merge master and dev2"
然后删除dev2
vpsmaster@ubuntu:~/git$ git branch -d dev2
Deleted branch dev2 (was e55d265).
分支策略 在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
vpsmaster@ubuntu:~/git$ git status
On branch dev3
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
dev4
dev5
no changes added to commit (use "git add" and/or "git commit -a")
vpsmaster@ubuntu:~/git$ git stash
Saved working directory and index state WIP on dev3: d66dade dev3
HEAD is now at d66dade dev3
vpsmaster@ubuntu:~/git$ vi readme.txt
vpsmaster@ubuntu:~/git$ ll
total 20
drwxrwxr-x 4 vpsmaster vpsmaster 4096 Jun 14 01:29 ./
drwxr-xr-x 29 vpsmaster vpsmaster 4096 Jun 13 23:34 ../
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 14 01:20 dev3
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 14 01:21 dev4
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 14 01:27 dev5
drwxrwxr-x 2 vpsmaster vpsmaster 4096 Jun 14 01:27 dev6/
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 13 23:00 file2
drwxrwxr-x 8 vpsmaster vpsmaster 4096 Jun 14 01:29 .git/
-rw-rw-r-- 1 vpsmaster vpsmaster 24 Jun 14 01:29 readme.txt
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 14 00:06 testbranch
-rw-rw-r-- 1 vpsmaster vpsmaster 0 Jun 13 23:13 testrm
vpsmaster@ubuntu:~/git$ git stash pop
On branch dev3
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
dev4
dev5
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (1c9c9f43a70df0a2d15685ba8ef323ff403e4672)
vpsmaster@ubuntu:~/git$ vi readme.txt
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。